mod_harmonics Module


Uses

  • module~~mod_harmonics~~UsesGraph module~mod_harmonics mod_harmonics module~mod_fmm_utils mod_fmm_utils module~mod_harmonics->module~mod_fmm_utils module~mod_constants mod_constants module~mod_harmonics->module~mod_constants module~mod_fmm_utils->module~mod_constants iso_c_binding iso_c_binding module~mod_constants->iso_c_binding

Used by

  • module~~mod_harmonics~~UsedByGraph module~mod_harmonics mod_harmonics module~mod_fmm mod_fmm module~mod_fmm->module~mod_harmonics module~fmmlib_interface fmmlib_interface module~fmmlib_interface->module~mod_harmonics module~fmmlib_interface->module~mod_fmm proc~tree_m2m tree_m2m proc~tree_m2m->module~mod_harmonics proc~tree_p2m tree_p2m proc~tree_p2m->module~mod_harmonics proc~tree_m2l tree_m2l proc~tree_m2l->module~mod_harmonics proc~tree_l2l tree_l2l proc~tree_l2l->module~mod_harmonics proc~cart_propfar_at_ipart cart_propfar_at_ipart proc~cart_propfar_at_ipart->module~mod_harmonics proc~cart_propnear_at_ipart cart_propnear_at_ipart proc~cart_propnear_at_ipart->module~mod_harmonics module~mod_electrostatics mod_electrostatics module~mod_electrostatics->module~fmmlib_interface proc~mmpol_init mmpol_init proc~mmpol_init->module~mod_electrostatics proc~electrostatic_for_grad electrostatic_for_grad proc~electrostatic_for_grad->module~mod_electrostatics proc~c_ommp_set_fmm_distance C_ommp_set_fmm_distance proc~c_ommp_set_fmm_distance->module~mod_electrostatics proc~ommp_get_polelec_energy ommp_get_polelec_energy proc~ommp_get_polelec_energy->module~mod_electrostatics module~mod_polarization mod_polarization proc~ommp_get_polelec_energy->module~mod_polarization proc~mmpol_init_from_xyz mmpol_init_from_xyz proc~mmpol_init_from_xyz->module~mod_electrostatics module~mod_mmpol mod_mmpol proc~mmpol_init_from_xyz->module~mod_mmpol module~mod_prm mod_prm proc~mmpol_init_from_xyz->module~mod_prm module~mod_mmpol->module~mod_electrostatics proc~init_eel_for_link_atom init_eel_for_link_atom proc~init_eel_for_link_atom->module~mod_electrostatics proc~init_eel_for_link_atom->module~mod_prm proc~mmpol_init_from_mmp mmpol_init_from_mmp proc~mmpol_init_from_mmp->module~mod_electrostatics proc~mmpol_init_from_mmp->module~mod_mmpol proc~rotate_multipoles rotate_multipoles proc~rotate_multipoles->module~mod_electrostatics proc~mmpol_init_from_hdf5 mmpol_init_from_hdf5 proc~mmpol_init_from_hdf5->module~mod_electrostatics proc~mmpol_init_from_hdf5->module~mod_mmpol proc~assign_mpoles assign_mpoles proc~assign_mpoles->module~mod_electrostatics proc~ommp_potential_mm2ext ommp_potential_mm2ext proc~ommp_potential_mm2ext->module~mod_electrostatics proc~fixedelec_geomgrad fixedelec_geomgrad proc~fixedelec_geomgrad->module~mod_electrostatics proc~ommp_get_fixedelec_energy ommp_get_fixedelec_energy proc~ommp_get_fixedelec_energy->module~mod_electrostatics module~mod_solvers mod_solvers module~mod_solvers->module~mod_electrostatics proc~tmatvec_otf TMatVec_otf proc~tmatvec_otf->module~mod_electrostatics proc~c_ommp_field_mm2ext C_ommp_field_mm2ext proc~c_ommp_field_mm2ext->module~mod_electrostatics proc~ommp_turn_pol_off ommp_turn_pol_off proc~ommp_turn_pol_off->module~mod_electrostatics proc~c_ommp_field_pol2ext C_ommp_field_pol2ext proc~c_ommp_field_pol2ext->module~mod_electrostatics module~ommp_interface ommp_interface module~ommp_interface->module~mod_electrostatics module~ommp_interface->module~mod_mmpol module~mod_iohdf5 mod_iohdf5 module~ommp_interface->module~mod_iohdf5 module~mod_qm_helper mod_qm_helper module~ommp_interface->module~mod_qm_helper module~mod_iohdf5->module~mod_electrostatics module~mod_iohdf5->module~mod_mmpol proc~ommp_set_default_matv ommp_set_default_matv proc~ommp_set_default_matv->module~mod_electrostatics proc~ommp_field_mm2ext ommp_field_mm2ext proc~ommp_field_mm2ext->module~mod_electrostatics proc~ommp_field_pol2ext ommp_field_pol2ext proc~ommp_field_pol2ext->module~mod_electrostatics proc~ommp_potential_mmpol2ext ommp_potential_mmpol2ext proc~ommp_potential_mmpol2ext->module~mod_electrostatics proc~mmpol_terminate mmpol_terminate proc~mmpol_terminate->module~mod_electrostatics proc~ommp_set_default_solver ommp_set_default_solver proc~ommp_set_default_solver->module~mod_electrostatics proc~ommp_set_external_field ommp_set_external_field proc~ommp_set_external_field->module~mod_electrostatics proc~ommp_set_external_field->module~mod_polarization proc~ommp_field_mmpol2ext ommp_field_mmpol2ext proc~ommp_field_mmpol2ext->module~mod_electrostatics proc~update_coordinates update_coordinates proc~update_coordinates->module~mod_electrostatics proc~electrostatic_for_ene electrostatic_for_ene proc~electrostatic_for_ene->module~mod_electrostatics proc~ommp_potential_pol2ext ommp_potential_pol2ext proc~ommp_potential_pol2ext->module~mod_electrostatics proc~rotation_geomgrad rotation_geomgrad proc~rotation_geomgrad->module~mod_electrostatics proc~mmpol_prepare mmpol_prepare proc~mmpol_prepare->module~mod_electrostatics proc~c_ommp_set_fmm_min_cell_size C_ommp_set_fmm_min_cell_size proc~c_ommp_set_fmm_min_cell_size->module~mod_electrostatics module~mod_polarization->module~mod_electrostatics module~mod_polarization->module~mod_mmpol proc~dipole_t dipole_T proc~dipole_t->module~mod_electrostatics proc~assign_pol assign_pol proc~assign_pol->module~mod_electrostatics proc~polelec_geomgrad polelec_geomgrad proc~polelec_geomgrad->module~mod_electrostatics proc~polelec_geomgrad->module~mod_polarization module~mod_prm->module~mod_electrostatics proc~polarization polarization proc~polarization->module~mod_solvers proc~ommp_system_from_qm_helper ommp_system_from_qm_helper proc~ommp_system_from_qm_helper->module~mod_mmpol proc~ommp_system_from_qm_helper->module~mod_prm proc~qm_helper_link_atom_geomgrad qm_helper_link_atom_geomgrad proc~qm_helper_link_atom_geomgrad->module~mod_mmpol module~mod_inputloader mod_inputloader module~mod_inputloader->module~mod_mmpol proc~r1_hdf5_read_array r1_hdf5_read_array proc~r1_hdf5_read_array->module~mod_mmpol proc~r2_hdf5_read_array r2_hdf5_read_array proc~r2_hdf5_read_array->module~mod_mmpol proc~i2_hdf5_read_array i2_hdf5_read_array proc~i2_hdf5_read_array->module~mod_mmpol proc~i1_hdf5_read_array i1_hdf5_read_array proc~i1_hdf5_read_array->module~mod_mmpol module~mod_qm_helper->module~mod_mmpol proc~qm_helper_vdw_energy qm_helper_vdw_energy proc~qm_helper_vdw_energy->module~mod_mmpol proc~qm_helper_init_vdw_prm qm_helper_init_vdw_prm proc~qm_helper_init_vdw_prm->module~mod_prm proc~init_bonded_for_link_atom init_bonded_for_link_atom proc~init_bonded_for_link_atom->module~mod_prm proc~l1_hdf5_read_array l1_hdf5_read_array proc~l1_hdf5_read_array->module~mod_mmpol proc~i3_hdf5_read_array i3_hdf5_read_array proc~i3_hdf5_read_array->module~mod_mmpol proc~ommp_terminate ommp_terminate proc~ommp_terminate->module~mod_mmpol proc~qm_helper_vdw_geomgrad qm_helper_vdw_geomgrad proc~qm_helper_vdw_geomgrad->module~mod_mmpol module~mod_geomgrad mod_geomgrad module~mod_geomgrad->module~mod_mmpol proc~ommp_create_link_atom ommp_create_link_atom proc~ommp_create_link_atom->module~mod_mmpol proc~ommp_create_link_atom->module~mod_qm_helper proc~r3_hdf5_read_array r3_hdf5_read_array proc~r3_hdf5_read_array->module~mod_mmpol proc~l2_hdf5_read_array l2_hdf5_read_array proc~l2_hdf5_read_array->module~mod_mmpol proc~c_ommp_full_geomgrad C_ommp_full_geomgrad proc~c_ommp_full_geomgrad->module~ommp_interface proc~c_ommp_update_coordinates C_ommp_update_coordinates proc~c_ommp_update_coordinates->module~mod_mmpol module~mod_ommp_c_interface mod_ommp_C_interface module~mod_ommp_c_interface->module~ommp_interface proc~ommp_fixedelec_geomgrad ommp_fixedelec_geomgrad proc~ommp_fixedelec_geomgrad->module~mod_geomgrad proc~c_ommp_qm_helper_use_frozen C_ommp_qm_helper_use_frozen proc~c_ommp_qm_helper_use_frozen->module~mod_qm_helper proc~c_ommp_qm_helper_get_cqm C_ommp_qm_helper_get_cqm proc~c_ommp_qm_helper_get_cqm->module~mod_qm_helper proc~c_ommp_qm_helper_get_v_m2n C_ommp_qm_helper_get_V_m2n proc~c_ommp_qm_helper_get_v_m2n->module~mod_qm_helper proc~c_ommp_qm_helper_get_e_p2n C_ommp_qm_helper_get_E_p2n proc~c_ommp_qm_helper_get_e_p2n->module~mod_qm_helper proc~c_ommp_qm_helper_get_h_n2m C_ommp_qm_helper_get_H_n2m proc~c_ommp_qm_helper_get_h_n2m->module~mod_qm_helper proc~ommp_qm_helper_vdw_energy ommp_qm_helper_vdw_energy proc~ommp_qm_helper_vdw_energy->module~mod_qm_helper proc~ommp_terminate_qm_helper ommp_terminate_qm_helper proc~ommp_terminate_qm_helper->module~mod_qm_helper proc~ommp_qm_helper_vdw_geomgrad ommp_qm_helper_vdw_geomgrad proc~ommp_qm_helper_vdw_geomgrad->module~mod_qm_helper proc~c_ommp_qm_helper_get_frozen C_ommp_qm_helper_get_frozen proc~c_ommp_qm_helper_get_frozen->module~mod_qm_helper proc~c_ommp_qm_helper_get_e_n2p C_ommp_qm_helper_get_E_n2p proc~c_ommp_qm_helper_get_e_n2p->module~mod_qm_helper proc~ommp_full_geomgrad ommp_full_geomgrad proc~ommp_full_geomgrad->module~mod_geomgrad proc~ommp_polelec_geomgrad ommp_polelec_geomgrad proc~ommp_polelec_geomgrad->module~mod_geomgrad proc~c_ommp_qm_helper_get_g_n2p C_ommp_qm_helper_get_G_n2p proc~c_ommp_qm_helper_get_g_n2p->module~mod_qm_helper proc~ommp_init_qm_helper ommp_init_qm_helper proc~ommp_init_qm_helper->module~mod_qm_helper proc~c_ommp_qm_helper_get_e_n2m C_ommp_qm_helper_get_E_n2m proc~c_ommp_qm_helper_get_e_n2m->module~mod_qm_helper proc~c_ommp_qm_helper_get_g_n2m C_ommp_qm_helper_get_G_n2m proc~c_ommp_qm_helper_get_g_n2m->module~mod_qm_helper proc~ommp_init_mmp ommp_init_mmp proc~ommp_init_mmp->module~mod_inputloader proc~c_ommp_qm_helper_use_nonbonded C_ommp_qm_helper_use_nonbonded proc~c_ommp_qm_helper_use_nonbonded->module~mod_qm_helper proc~ommp_init_xyz ommp_init_xyz proc~ommp_init_xyz->module~mod_inputloader proc~ommp_qm_helper_update_coord ommp_qm_helper_update_coord proc~ommp_qm_helper_update_coord->module~mod_qm_helper proc~ommp_qm_helper_link_atom_geomgrad ommp_qm_helper_link_atom_geomgrad proc~ommp_qm_helper_link_atom_geomgrad->module~mod_qm_helper proc~ommp_update_link_atoms_position ommp_update_link_atoms_position proc~ommp_update_link_atoms_position->module~mod_qm_helper proc~c_ommp_qm_helper_get_e_m2n C_ommp_qm_helper_get_E_m2n proc~c_ommp_qm_helper_get_e_m2n->module~mod_qm_helper proc~c_ommp_qm_helper_get_qm_atoms C_ommp_qm_helper_get_qm_atoms proc~c_ommp_qm_helper_get_qm_atoms->module~mod_qm_helper proc~c_ommp_qm_helper_get_npol C_ommp_qm_helper_get_npol proc~c_ommp_qm_helper_get_npol->module~mod_qm_helper proc~c_ommp_terminate_qm_helper C_ommp_terminate_qm_helper proc~c_ommp_terminate_qm_helper->module~mod_qm_helper proc~c_ommp_qm_helper_get_nmm C_ommp_qm_helper_get_nmm proc~c_ommp_qm_helper_get_nmm->module~mod_qm_helper proc~c_ommp_qm_helper_get_v_p2n C_ommp_qm_helper_get_V_p2n proc~c_ommp_qm_helper_get_v_p2n->module~mod_qm_helper

Contents


Variables

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

Subroutines

public subroutine prepare_fmmm_constants(pm, pl)

Arguments

Type IntentOptional Attributes Name
integer(kind=ip), intent(in) :: pm
integer(kind=ip), intent(in) :: pl

private subroutine make_vscales(p)

Compute scaling factors of real normalized spherical harmonics

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: p

private subroutine make_vcnk(dmax)

Compute FMM-related constants

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: dmax

private subroutine make_m2l_ztranslate_coef(pm, pl)

Compute FMM-related constants

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: pm
integer, intent(in) :: pl

private subroutine make_vfact(p, vfact)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: p
real(kind=rp), intent(out) :: vfact(2*p+1)

private subroutine trgev(cphi, sphi, p, vcos, vsin)

Compute arrays of \f$ \cos(m \phi) \f$ and \f$ \sin(m \phi) \f$

Read more…

Arguments

Type IntentOptional 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)

private subroutine fmm_m2m_ztranslate_work(z, p, vscales, vcnk, alpha, src_m, beta, dst_m, work)

Direct M2M translation over OZ axis

Read more…

Arguments

Type IntentOptional 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))

private subroutine fmm_sph_rotate_oz_work(p, vcos, vsin, alpha, src, beta, dst)

Rotate spherical harmonics around OZ axis

Read more…

Arguments

Type IntentOptional 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))

private subroutine carttosph(x, rho, ctheta, stheta, cphi, sphi)

Convert input cartesian coordinate into spherical coordinate

Read more…

Arguments

Type IntentOptional 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

private subroutine fmm_sph_rotate_oxz_work(p, ctheta, stheta, alpha, src, beta, dst, work)

Transform spherical harmonics in the OXZ plane

Read more…

Arguments

Type IntentOptional 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)

private subroutine fmm_sph_rotate_oz_adj_work(p, vcos, vsin, alpha, src, beta, dst)

Rotate spherical harmonics around OZ axis in an opposite direction

Read more…

Arguments

Type IntentOptional 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))

private subroutine fmm_m2l_ztranslate_work(z, pm, pl, vscales, m2l_ztranslate_coef, alpha, src_m, beta, dst_l, work)

Direct M2L translation over OZ axis

Read more…

Arguments

Type IntentOptional 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))

private subroutine fmm_l2l_ztranslate_work(z, p, vscales, vfact, alpha, src_l, beta, dst_l, work)

Direct L2L translation over OZ axis

Read more…

Arguments

Type IntentOptional 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))

private subroutine fmm_m2m_rotation_work(c, p, vscales, vcnk, alpha, src_m, beta, dst_m, work)

Direct M2M translation by 4 rotations and 1 translation

Read more…

Arguments

Type IntentOptional 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)

private subroutine fmm_m2l_rotation_work(c, pm, pl, vscales, m2l_ztranslate_coef, alpha, src_m, beta, dst_l, work)

Direct M2L translation by 4 rotations and 1 translation

Read more…

Arguments

Type IntentOptional 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)

private subroutine fmm_l2l_rotation_work(c, p, vscales, vfact, alpha, src_l, beta, dst_l, work)

Direct L2L translation by 4 rotations and 1 translation

Read more…

Arguments

Type IntentOptional 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)

public subroutine fmm_m2m(c_st, pm, s, t)

Arguments

Type IntentOptional 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

public subroutine fmm_m2l(c_st, pm, pl, s, t)

Arguments

Type IntentOptional 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

public subroutine fmm_l2l(c_st, r_s, r_t, pl, s, t)

Arguments

Type IntentOptional 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

private subroutine fmm_m2p_work(c, src_r, p, vscales_rel, alpha, src_m, beta, dst_v, work)

Accumulate potential, induced by multipole spherical harmonics

Read more…

Arguments

Type IntentOptional 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)

public subroutine fmm_m2p(c_st, r_s, pm, s, potential)

Arguments

Type IntentOptional 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