Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=rp), | private, | allocatable | :: | vscales(:) | |||
real(kind=rp), | private, | allocatable | :: | vscales_rel(:) | |||
real(kind=rp), | private, | allocatable | :: | vcnk(:) | |||
real(kind=rp), | private, | allocatable | :: | m2l_ztranslate_coef(:,:,:) | |||
integer(kind=ip), | private | :: | vscales_p | = | 0 | ||
integer(kind=ip), | private | :: | vcnk_dmax | = | 0 | ||
integer(kind=ip), | private | :: | m2l_pm | = | 0 | ||
integer(kind=ip), | private | :: | m2l_pl | = | 0 |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=ip), | intent(in) | :: | pm | |||
integer(kind=ip), | intent(in) | :: | pl |
Compute scaling factors of real normalized spherical harmonics
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | p |
Compute FMM-related constants
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | dmax |
Compute FMM-related constants
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | pm | |||
integer, | intent(in) | :: | pl |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | p | |||
real(kind=rp), | intent(out) | :: | vfact(2*p+1) |
Compute arrays of \f$ \cos(m \phi) \f$ and \f$ \sin(m \phi) \f$
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp), | intent(in) | :: | cphi | |||
real(kind=rp), | intent(in) | :: | sphi | |||
integer, | intent(in) | :: | p | |||
real(kind=rp), | intent(out) | :: | vcos(p+1) | |||
real(kind=rp), | intent(out) | :: | vsin(p+1) |
Direct M2M translation over OZ axis
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp), | intent(in) | :: | z | |||
integer, | intent(in) | :: | p | |||
real(kind=rp), | intent(in) | :: | vscales((p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | vcnk((2*p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | alpha | |||
real(kind=rp), | intent(in) | :: | src_m((p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | beta | |||
real(kind=rp), | intent(inout) | :: | dst_m((p+1)*(p+1)) | |||
real(kind=rp), | intent(out), | target | :: | work(2*(p+1)) |
Rotate spherical harmonics around OZ axis
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | p | |||
real(kind=rp), | intent(in) | :: | vcos(p+1) | |||
real(kind=rp), | intent(in) | :: | vsin(p+1) | |||
real(kind=rp), | intent(in) | :: | alpha | |||
real(kind=rp), | intent(in) | :: | src((p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | beta | |||
real(kind=rp), | intent(inout) | :: | dst((p+1)*(p+1)) |
Convert input cartesian coordinate into spherical coordinate
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp), | intent(in) | :: | x(3) | |||
real(kind=rp), | intent(out) | :: | rho | |||
real(kind=rp), | intent(out) | :: | ctheta | |||
real(kind=rp), | intent(out) | :: | stheta | |||
real(kind=rp), | intent(out) | :: | cphi | |||
real(kind=rp), | intent(out) | :: | sphi |
Transform spherical harmonics in the OXZ plane
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | p | |||
real(kind=rp), | intent(in) | :: | ctheta | |||
real(kind=rp), | intent(in) | :: | stheta | |||
real(kind=rp), | intent(in) | :: | alpha | |||
real(kind=rp), | intent(in) | :: | src((p+1)**2) | |||
real(kind=rp), | intent(in) | :: | beta | |||
real(kind=rp), | intent(out) | :: | dst((p+1)*(p+1)) | |||
real(kind=rp), | intent(out), | target | :: | work(4*p*p+13*p+4) |
Rotate spherical harmonics around OZ axis in an opposite direction
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | p | |||
real(kind=rp), | intent(in) | :: | vcos(p+1) | |||
real(kind=rp), | intent(in) | :: | vsin(p+1) | |||
real(kind=rp), | intent(in) | :: | alpha | |||
real(kind=rp), | intent(in) | :: | src((p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | beta | |||
real(kind=rp), | intent(inout) | :: | dst((p+1)*(p+1)) |
Direct M2L translation over OZ axis
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp), | intent(in) | :: | z | |||
integer, | intent(in) | :: | pm | |||
integer, | intent(in) | :: | pl | |||
real(kind=rp), | intent(in) | :: | vscales((pm+pl+1)*(pm+pl+1)) | |||
real(kind=rp), | intent(in) | :: | m2l_ztranslate_coef(pm+1,pl+1,pl+1) | |||
real(kind=rp), | intent(in) | :: | alpha | |||
real(kind=rp), | intent(in) | :: | src_m((pm+1)*(pm+1)) | |||
real(kind=rp), | intent(in) | :: | beta | |||
real(kind=rp), | intent(inout) | :: | dst_l((pl+1)*(pl+1)) | |||
real(kind=rp), | intent(out), | target | :: | work((pm+2)*(pm+1)) |
Direct L2L translation over OZ axis
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp), | intent(in) | :: | z | |||
integer, | intent(in) | :: | p | |||
real(kind=rp), | intent(in) | :: | vscales((p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | vfact(2*p+1) | |||
real(kind=rp), | intent(in) | :: | alpha | |||
real(kind=rp), | intent(in) | :: | src_l((p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | beta | |||
real(kind=rp), | intent(inout) | :: | dst_l((p+1)*(p+1)) | |||
real(kind=rp), | intent(out), | target | :: | work(2*(p+1)) |
Direct M2M translation by 4 rotations and 1 translation
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp), | intent(in) | :: | c(3) | |||
integer, | intent(in) | :: | p | |||
real(kind=rp), | intent(in) | :: | vscales((p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | vcnk((2*p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | alpha | |||
real(kind=rp), | intent(in) | :: | src_m((p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | beta | |||
real(kind=rp), | intent(inout) | :: | dst_m((p+1)*(p+1)) | |||
real(kind=rp), | intent(out), | target | :: | work(6*p*p+19*p+8) |
Direct M2L translation by 4 rotations and 1 translation
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp), | intent(in) | :: | c(3) | |||
integer, | intent(in) | :: | pm | |||
integer, | intent(in) | :: | pl | |||
real(kind=rp), | intent(in) | :: | vscales((pm+pl+1)**2) | |||
real(kind=rp), | intent(in) | :: | m2l_ztranslate_coef(pm+1,pl+1,pl+1) | |||
real(kind=rp), | intent(in) | :: | alpha | |||
real(kind=rp), | intent(in) | :: | src_m((pm+1)*(pm+1)) | |||
real(kind=rp), | intent(in) | :: | beta | |||
real(kind=rp), | intent(inout) | :: | dst_l((pl+1)*(pl+1)) | |||
real(kind=rp), | intent(out), | target | :: | work(6*max(pm,pl)**2+19*max(pm,pl)+8) |
Direct L2L translation by 4 rotations and 1 translation
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp), | intent(in) | :: | c(3) | |||
integer, | intent(in) | :: | p | |||
real(kind=rp), | intent(in) | :: | vscales((p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | vfact(2*p+1) | |||
real(kind=rp), | intent(in) | :: | alpha | |||
real(kind=rp), | intent(in) | :: | src_l((p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | beta | |||
real(kind=rp), | intent(inout) | :: | dst_l((p+1)*(p+1)) | |||
real(kind=rp), | intent(out), | target | :: | work(6*p*p+19*p+8) |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp) | :: | c_st(3) |
Distance vector from source to target |
|||
integer(kind=ip) | :: | pm |
Maximum level of spherical harmonics expansion for multipoles |
|||
real(kind=rp) | :: | s(:) |
Source distribution expansion coefficients |
|||
real(kind=rp) | :: | t(:) |
Target distribution expansion coefficients |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp) | :: | c_st(3) |
Distance vector from source to target |
|||
integer(kind=ip) | :: | pm |
Maximum level of spherical harmonics expansion for multipoles |
|||
integer(kind=ip) | :: | pl |
Maximum level of spherical harmonics expansion for local exp. |
|||
real(kind=rp) | :: | s(:) |
Source distribution expansion coefficients |
|||
real(kind=rp) | :: | t(:) |
Target distribution expansion coefficients |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp) | :: | c_st(3) |
Distance vector from source to target |
|||
real(kind=rp) | :: | r_s |
Size of source node |
|||
real(kind=rp) | :: | r_t |
Size of target node |
|||
integer(kind=ip) | :: | pl |
Maximum level of spherical harmonics expansion for local exp. |
|||
real(kind=rp) | :: | s(:) |
Source distribution expansion coefficients |
|||
real(kind=rp) | :: | t(:) |
Target distribution expansion coefficients |
Accumulate potential, induced by multipole spherical harmonics
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp), | intent(in) | :: | c(3) | |||
real(kind=rp), | intent(in) | :: | src_r | |||
integer, | intent(in) | :: | p | |||
real(kind=rp), | intent(in) | :: | vscales_rel((p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | alpha | |||
real(kind=rp), | intent(in) | :: | src_m((p+1)*(p+1)) | |||
real(kind=rp), | intent(in) | :: | beta | |||
real(kind=rp), | intent(inout) | :: | dst_v | |||
real(kind=rp), | intent(out), | target | :: | work(p+1) |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp) | :: | c_st(3) |
Distance vector from source to target |
|||
real(kind=rp) | :: | r_s |
Size of source node |
|||
integer(kind=ip) | :: | pm |
Maximum level of spherical harmonics expansion for multipoles |
|||
real(kind=rp) | :: | s(:) |
Target distribution expansion coefficients |
|||
real(kind=rp), | intent(out) | :: | potential |