private subroutine carttosph(x, rho, ctheta, stheta, cphi, sphi)
Convert input cartesian coordinate into spherical coordinate
Output coordinate \f$ (\rho, \theta, \phi) \f$ is presented by \f$ (\rho,
\cos \theta, \sin \theta, \cos \phi, \sin\phi) \f$.
@param[in] x: Cartesian coordinate
@param[out] rho: \f$ \rho \f$
@param[out] ctheta: \f$ \cos \theta \f$
@param[out] stheta: \f$ \sin \theta \f$
@param[out] cphi: \f$ \cos \phi \f$
@param[out] sphi: \f$ \sin \phi \f$
Arguments
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
Called by
proc~~carttosph~~CalledByGraph
proc~carttosph
carttosph
proc~fmm_m2m_rotation_work
fmm_m2m_rotation_work
proc~fmm_m2m_rotation_work->proc~carttosph
proc~fmm_l2l_rotation_work
fmm_l2l_rotation_work
proc~fmm_l2l_rotation_work->proc~carttosph
proc~fmm_m2l_rotation_work
fmm_m2l_rotation_work
proc~fmm_m2l_rotation_work->proc~carttosph
proc~fmm_m2m
fmm_m2m
proc~fmm_m2m->proc~fmm_m2m_rotation_work
proc~fmm_l2l
fmm_l2l
proc~fmm_l2l->proc~fmm_l2l_rotation_work
proc~fmm_m2l
fmm_m2l
proc~fmm_m2l->proc~fmm_m2l_rotation_work
proc~tree_p2m
tree_p2m
proc~tree_p2m->proc~fmm_m2m
proc~cart_propfar_at_ipart
cart_propfar_at_ipart
proc~cart_propfar_at_ipart->proc~fmm_l2l
proc~tree_m2m
tree_m2m
proc~tree_m2m->proc~fmm_m2m
proc~tree_m2l
tree_m2l
proc~tree_m2l->proc~fmm_m2l
proc~tree_l2l
tree_l2l
proc~tree_l2l->proc~fmm_l2l
proc~cart_propnear_at_ipart
cart_propnear_at_ipart
proc~cart_propnear_at_ipart->proc~fmm_m2l
proc~fmm_solve_for_multipoles
fmm_solve_for_multipoles
proc~fmm_solve_for_multipoles->proc~tree_p2m
proc~fmm_solve_for_multipoles->proc~tree_m2m
proc~fmm_solve_for_multipoles->proc~tree_m2l
proc~fmm_solve_for_multipoles->proc~tree_l2l
proc~elec_prop_d2m
elec_prop_D2M
proc~elec_prop_d2m->proc~cart_propfar_at_ipart
proc~prepare_fmm_ipd
prepare_fmm_ipd
proc~elec_prop_d2m->proc~prepare_fmm_ipd
proc~field_extd2d
field_extD2D
proc~field_extd2d->proc~cart_propfar_at_ipart
proc~prepare_fmm_ext_ipd
prepare_fmm_ext_ipd
proc~field_extd2d->proc~prepare_fmm_ext_ipd
proc~elec_prop_d2d
elec_prop_D2D
proc~elec_prop_d2d->proc~cart_propfar_at_ipart
proc~elec_prop_d2d->proc~prepare_fmm_ipd
proc~elec_prop_m2m
elec_prop_M2M
proc~elec_prop_m2m->proc~cart_propfar_at_ipart
proc~preapare_fmm_static
preapare_fmm_static
proc~elec_prop_m2m->proc~preapare_fmm_static
proc~elec_prop_m2d
elec_prop_M2D
proc~elec_prop_m2d->proc~cart_propfar_at_ipart
proc~elec_prop_m2d->proc~preapare_fmm_static
proc~cart_prop_at_ipart
cart_prop_at_ipart
proc~cart_prop_at_ipart->proc~cart_propfar_at_ipart
proc~cart_prop_at_ipart->proc~cart_propnear_at_ipart
proc~fmm_solve
fmm_solve
proc~fmm_solve->proc~tree_m2m
proc~fmm_solve->proc~tree_m2l
proc~fmm_solve->proc~tree_l2l
proc~prepare_fmm_ext_ipd->proc~fmm_solve_for_multipoles
proc~preapare_fmm_static->proc~fmm_solve_for_multipoles
proc~prepare_polelec
prepare_polelec
proc~prepare_polelec->proc~elec_prop_d2m
proc~prepare_polelec->proc~elec_prop_d2d
proc~prepare_polelec->proc~elec_prop_m2d
proc~prepare_fixedelec
prepare_fixedelec
proc~prepare_fixedelec->proc~elec_prop_m2m
proc~tmatvec_otf
TMatVec_otf
proc~tmatvec_otf->proc~field_extd2d
proc~prepare_fmm_ipd->proc~prepare_fmm_ext_ipd
proc~ommp_get_polelec_energy
ommp_get_polelec_energy
proc~ommp_get_polelec_energy->proc~prepare_polelec
proc~energy_mm_pol
energy_MM_pol
proc~ommp_get_polelec_energy->proc~energy_mm_pol
proc~ommp_set_external_field
ommp_set_external_field
proc~ommp_set_external_field->proc~prepare_polelec
proc~polelec_geomgrad
polelec_geomgrad
proc~polelec_geomgrad->proc~prepare_polelec
proc~energy_mm_pol->proc~prepare_polelec
proc~fixedelec_geomgrad
fixedelec_geomgrad
proc~fixedelec_geomgrad->proc~prepare_fixedelec
proc~energy_mm_mm
energy_MM_MM
proc~energy_mm_mm->proc~prepare_fixedelec
proc~ommp_get_full_ele_energy
ommp_get_full_ele_energy
proc~ommp_get_full_ele_energy->proc~ommp_get_polelec_energy
proc~ommp_get_fixedelec_energy
ommp_get_fixedelec_energy
proc~ommp_get_full_ele_energy->proc~ommp_get_fixedelec_energy
proc~c_ommp_get_polelec_energy
C_ommp_get_polelec_energy
proc~c_ommp_get_polelec_energy->proc~ommp_get_polelec_energy
proc~ommp_set_external_field_nomm
ommp_set_external_field_nomm
proc~ommp_set_external_field_nomm->proc~ommp_set_external_field
proc~c_ommp_set_external_field
C_ommp_set_external_field
proc~c_ommp_set_external_field->proc~ommp_set_external_field
proc~c_ommp_set_external_field_nomm
C_ommp_set_external_field_nomm
proc~c_ommp_set_external_field_nomm->proc~ommp_set_external_field
proc~ommp_polelec_geomgrad
ommp_polelec_geomgrad
proc~ommp_polelec_geomgrad->proc~polelec_geomgrad
proc~ommp_full_geomgrad
ommp_full_geomgrad
proc~ommp_full_geomgrad->proc~polelec_geomgrad
proc~ommp_full_geomgrad->proc~fixedelec_geomgrad
proc~ommp_fixedelec_geomgrad
ommp_fixedelec_geomgrad
proc~ommp_fixedelec_geomgrad->proc~fixedelec_geomgrad
proc~ommp_get_fixedelec_energy->proc~energy_mm_mm
proc~ommp_get_full_energy
ommp_get_full_energy
proc~ommp_get_full_energy->proc~ommp_get_full_ele_energy
proc~c_ommp_polelec_geomgrad
C_ommp_polelec_geomgrad
proc~c_ommp_polelec_geomgrad->proc~ommp_polelec_geomgrad
proc~c_ommp_full_geomgrad
C_ommp_full_geomgrad
proc~c_ommp_full_geomgrad->proc~ommp_full_geomgrad
proc~c_ommp_fixedelec_geomgrad
C_ommp_fixedelec_geomgrad
proc~c_ommp_fixedelec_geomgrad->proc~ommp_fixedelec_geomgrad
proc~c_ommp_get_full_ele_energy
C_ommp_get_full_ele_energy
proc~c_ommp_get_full_ele_energy->proc~ommp_get_full_ele_energy
proc~c_ommp_get_fixedelec_energy
C_ommp_get_fixedelec_energy
proc~c_ommp_get_fixedelec_energy->proc~ommp_get_fixedelec_energy
proc~c_ommp_get_full_energy
C_ommp_get_full_energy
proc~c_ommp_get_full_energy->proc~ommp_get_full_energy
Nodes of different colours represent the following:
Graph Key
Subroutine
Subroutine
Function
Function
Interface
Interface
Unknown Procedure Type
Unknown Procedure Type
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Source Code
subroutine carttosph ( x , rho , ctheta , stheta , cphi , sphi )
! Input
real ( rp ), intent ( in ) :: x ( 3 )
! Output
real ( rp ), intent ( out ) :: rho , ctheta , stheta , cphi , sphi
! Local variables
real ( rp ) :: max12 , ssq12
! Check x(1:2) = 0
if (( abs ( x ( 1 )) < eps_rp ) . and . ( abs ( x ( 2 )) < eps_rp )) then
rho = abs ( x ( 3 ))
ctheta = sign ( 1.0_rp , x ( 3 ))
stheta = 0.0
cphi = 1.0
sphi = 0.0
return
end if
! In other situations use sum-of-scaled-squares technique
! Get norm of x(1:2) and cphi with sphi outputs
if ( abs ( x ( 2 )) . gt . abs ( x ( 1 ))) then
max12 = abs ( x ( 2 ))
ssq12 = 1.0 + ( x ( 1 ) / x ( 2 )) ** 2
else
max12 = abs ( x ( 1 ))
ssq12 = 1.0 + ( x ( 2 ) / x ( 1 )) ** 2
end if
stheta = max12 * sqrt ( ssq12 )
cphi = x ( 1 ) / stheta
sphi = x ( 2 ) / stheta
! Then compute rho, ctheta and stheta outputs
if ( abs ( x ( 3 )) . gt . max12 ) then
rho = 1.0 + ssq12 * ( max12 / x ( 3 )) ** 2
rho = abs ( x ( 3 )) * sqrt ( rho )
stheta = stheta / rho
ctheta = x ( 3 ) / rho
else
rho = ssq12 + ( x ( 3 ) / max12 ) ** 2
rho = max12 * sqrt ( rho )
stheta = stheta / rho
ctheta = x ( 3 ) / rho
end if
end subroutine carttosph