diff --git a/pyfmmlib/version.py b/pyfmmlib/version.py index a41920d64571f4a6340bc371213452ffb7e529db..6ba2863610f2fe534ddbfabbbd4a41673be4294c 100644 --- a/pyfmmlib/version.py +++ b/pyfmmlib/version.py @@ -1,3 +1,3 @@ -VERSION = (2018, 1, 3) +VERSION = (2019, 1) VERSION_STATUS = "" VERSION_TEXT = ".".join(str(x) for x in VERSION) + VERSION_STATUS diff --git a/vec_wrappers.py b/vec_wrappers.py index bcf597f22a6a6809c44c0f712c8e8a62afd67aad..7dce1d630aa9bacd8354e849a4df18aacea4df3d 100644 --- a/vec_wrappers.py +++ b/vec_wrappers.py @@ -389,6 +389,14 @@ def gen_vector_wrappers(): real*8 triarea(nvcount) """, ["triarea"]) + gen_vector_wrapper("rotviarecur3p_init", """ + integer ier(nvcount) + real*8 rotmat(0:ldc,0:ldc,-ldc:ldc,nvcount) + integer ldc + real*8 theta(nvcount) + """, + ["ier", "rotmat"]) + # }}} # {{{ special functions @@ -826,6 +834,59 @@ def gen_vector_wrappers(): # }}} + # {{{ mploc_quadu2 translation operators + + dims = 3 + xlat = "mploc" + for eqn in [cgh.Laplace(dims), cgh.Helmholtz(dims)]: + func_name = "%s%dd%squadu2_trunc" % (eqn.lh_letter(), dims, xlat) + + args_template = Template(""" + ${ extra_args } + + real*8 rscale1(${input_dim}) + real*8 center1(${dims}, ${input_dim}) + complex*16 expn1(${expn_dims_1}, ${input_dim}) + integer nterms + integer nterms1 + + real*8 rscale2(nvcount) + real*8 center2(${dims}, nvcount) + complex*16 expn2(${expn_dims_2}, nvcount) + integer nterms2 + + %if lh_letter == "h": + real*8 radius(nvcount) + real*8 xnodes(nquad) + real*8 wts(nquad) + integer nquad + %endif + integer ier(nvcount) + + real*8 rotmatf(0:ldm,0:ldm,-ldm:ldm, ${input_dim}) + real*8 rotmatb(0:ldm,0:ldm,-ldm:ldm, ${input_dim}) + integer ldm + """, strict_undefined=True) + + args = args_template.render( + dims=dims, + lh_letter=eqn.lh_letter(), + expn_dims_1=eqn.expansion_dims("nterms1"), + expn_dims_2=eqn.expansion_dims("nterms2"), + extra_args=eqn.in_arg_decls(with_intent=False), + input_dim="*INDIRECT_MANY", + ) + + gen_vector_wrapper( + func_name, + args, + ["ier", "expn2"], + vec_func_name=func_name + "_imany", + output_reductions={"expn2": "sum", "ier": "max"}, + tmp_init={"ier": "0"}) + + # }}} + result.append("! vim: filetype=fortran") return "\n".join(result) diff --git a/wrappers.pyf.mako b/wrappers.pyf.mako index f10dd8e25de32265cf224c755720157c2e347e27..87efd653896cc4985867d360a63220069fe91eec 100644 --- a/wrappers.pyf.mako +++ b/wrappers.pyf.mako @@ -252,6 +252,17 @@ python module _internal integer, intent(out) :: ier end subroutine h2dterms + ! }}} + + ! {{{ rotation matrix construction + + subroutine rotviarecur3p_init(ier,rotmat,ldc,theta) + integer, intent(out) :: ier + real*8, intent(out) :: rotmat(0:ldc,0:ldc,-ldc:ldc) + integer, intent(in) :: ldc + real*8 intent(in) :: theta + end subroutine rotviarecur3p_init + ! }}} ! {{{ generated vectorized wrappers