TODO Check the signs in electrostatic elemental functions TODO [OPT] Use Laplace equation to simplify the calculations: TODO 1. Egrd(zz) = -(Egrd(xx) + Egrd(yy)) TODO 2. EHes(zzz) = -(EHes(xxz) + EHes(yyz)) TODO 3. EHes(zzx) = -(EHes(xxx) + EHes(yyx)) TODO 4. EHes(zzy) = -(EHes(xxy) + EHes(yyy)) TODO [OPT] Fundamental electrostatic functions should be pure/elemental TODO [BUG] Handling of flags gg
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=ip), | public | :: | def_solver |
Solver to be used by default for this eel object. |
|||
integer(kind=ip), | public | :: | def_matv |
Matrix-vector method to be used by default for this eel object. |
|||
type(ommp_topology_type), | public, | pointer | :: | top |
Data structure containing all the topological informations |
||
integer(kind=ip), | public | :: | pol_atoms |
number of polarizable atoms |
|||
logical(kind=lp), | public | :: | amoeba |
True if AMOEBA FF is used |
|||
integer(kind=ip), | public | :: | ld_cart |
size of the cartesian multipolar distribution (i.e., (l+1)(l+2)(l+3)/6) this is 1 for AMBER (charges only), 10 for AMOEBA (up to quadrupoles). this is also the size of the array that contains the electrostatic properties of the sources at the sources. ld_cder is the leading size of the derivative of such a distribution, which is 3 for AMBER and 19 for AMOEBA. |
|||
integer(kind=ip), | public | :: | ld_cder |
size of the cartesian multipolar distribution (i.e., (l+1)(l+2)(l+3)/6) this is 1 for AMBER (charges only), 10 for AMOEBA (up to quadrupoles). this is also the size of the array that contains the electrostatic properties of the sources at the sources. ld_cder is the leading size of the derivative of such a distribution, which is 3 for AMBER and 19 for AMOEBA. |
|||
integer(kind=ip), | public | :: | n_ipd |
number of induced point dipoles distributions this is 1 for AMBER and 2 for AMOEBA |
|||
real(kind=rp), | public | :: | mscale(4) |
factors for charge-charge (or multipole-multipole) interactions |
|||
real(kind=rp), | public | :: | pscale(4) |
factors for chrage-ipd (or multipole-ipd) interactions. in AMOEBA, this is used to define the polarization field, i.e., the right-hand side to the polarization equations, and depends on the connectivity. |
|||
real(kind=rp), | public | :: | pscale_intra(4) |
Only used for AMOEBA, same as pscale but for atoms that belong to the same polarization group |
|||
real(kind=rp), | public | :: | dscale(4) |
factors for multipoles-ipd interactions used to compute the direct field, which is used to define the polarization energy. these factors depend on the polarization group "connectivity" (AMOEBA only) |
|||
real(kind=rp), | public | :: | uscale(4) |
factor for ipd-ipd interactions. these depend on the connectivity (AMBER) or on the polarization group " connectivity (AMOEBA) |
|||
real(kind=rp), | public, | allocatable | :: | thole(:) |
array to store the thole factors for computing damping functions |
||
real(kind=rp), | public | :: | thole_scale |
Scale factor for thole damping (only used by non-AMOEBA FF); all the element of thole(:) are multiplied by thole_scale ** 0.5 |
|||
real(kind=rp), | public, | allocatable | :: | cpol(:,:) |
Coordinates of polarizable atoms (3:pol_atoms) |
||
real(kind=rp), | public, | allocatable | :: | q(:,:) |
Mutlipolar distribution (ld_cart:mm_atoms) For AMOEBA this is the rotated distribution. The order for the stored multipoles is q, px, py, pz, Qxx, Qxy, Qyy, Qxz, Qyx, Qzz. |
||
real(kind=rp), | public, | allocatable | :: | q0(:,:) |
Unrotated utlipolar distribution (ld_cart:mm_atoms) (AMOEBA only) |
||
real(kind=rp), | public, | allocatable | :: | pol(:) |
Polarizabilities for each polarizable atom |
||
integer(kind=ip), | public, | allocatable | :: | mm_polar(:) |
for each mm atom: 0 if is not polarizable, index in polarizable atom list otherwise |
||
integer(kind=ip), | public, | allocatable | :: | polar_mm(:) |
positions of a polarizable atom in the mm atoms list |
||
integer(kind=ip), | public, | allocatable | :: | C_polar_mm(:) |
polar_mm with 0-based C-indexing, only allocated at need. |
||
integer(kind=ip), | public, | allocatable | :: | mmat_polgrp(:) |
Polarizability group index for each MM site |
||
type(yale_sparse), | public | :: | polgrp_mmat |
For each polarization group index, list all the MM atoms included. It basically is a sparse boolean matrix of dimension N_polgroups x N_mmatoms |
|||
type(yale_sparse), | public, | allocatable | :: | pg_conn(:) |
Adjacency and connectivity matytrices between polarizability groups. Two groups are said to be adjacent if they are connected by a chemical bond. The 1st element is the identity matrix for code simplicity. |
||
integer(kind=ip), | public, | allocatable | :: | mol_frame(:) |
definition of the molecular frame convention: 0 ... do not rotate 1 ... z-then-x 2 ... bisector 3 ... z-only 4 ... z-bisector 5 ... 3-fold |
||
integer(kind=ip), | public, | allocatable | :: | ix(:) |
neighboring atoms used to define the axes of the molecular frame |
||
integer(kind=ip), | public, | allocatable | :: | iy(:) |
neighboring atoms used to define the axes of the molecular frame |
||
integer(kind=ip), | public, | allocatable | :: | iz(:) |
neighboring atoms used to define the axes of the molecular frame |
||
logical(kind=lp), | public | :: | use_fmm | = | .false. |
flag to use fast multipoles |
|
integer(kind=ip), | public | :: | fmm_maxl_static | = | 0 |
Maximum angular moment used in fast multipoles for fixed part |
|
integer(kind=ip), | public | :: | fmm_maxl_pol | = | 0 |
Maximum angular moment used in fast multipoles for polarizable part |
|
real(kind=rp), | public | :: | fmm_min_cell_size | = | 0.0 |
Minimum dimension for cell size used in FMM |
|
real(kind=rp), | public | :: | fmm_distance | = | 0.0 |
Threshold distance for considering two nodes in FMM tree as far |
|
type(fmm_type), | public, | allocatable | :: | fmm_static |
Fast multipoles object for static multipoles sources |
||
logical(kind=lp), | public | :: | fmm_static_done | = | .false. |
Flag for a fresh solution of ipd fmm |
|
type(fmm_type), | public, | allocatable | :: | fmm_ipd(:) |
Fast multipoles object for static multipoles sources |
||
logical(kind=lp), | public, | allocatable | :: | fmm_ipd_done(:) |
Flag for a fresh solution of ipd fmm |
||
type(fmm_tree_type), | public, | allocatable | :: | tree |
Tree object |
||
type(yale_sparse), | public | :: | fmm_near_field_list |
For each particle, all the particles that should be included in near field |
|||
logical(kind=lp), | public | :: | M2M_done | = | .false. |
flag to set when M2M electrostatic quantities are computed. |
|
logical(kind=lp), | public | :: | M2Mgg_done | = | .false. |
flag to set when M2M electrostatic quantities for geometrical gradients are computed. |
|
real(kind=rp), | public, | allocatable | :: | V_M2M(:) |
potential of MM permanent multipoles at MM sites; |
||
real(kind=rp), | public, | allocatable | :: | E_M2M(:,:) |
electric_field of MM permanent multipoles at MM sites; |
||
real(kind=rp), | public, | allocatable | :: | Egrd_M2M(:,:) |
electric_field gradient of MM permanent multipoles at MM sites; |
||
real(kind=rp), | public, | allocatable | :: | EHes_M2M(:,:) |
electric field Hessian of MM permanent multipoles at MM sites; |
||
logical(kind=lp), | public | :: | M2D_done | = | .false. |
Flag to set when M2D electrostatics have been computed. |
|
logical(kind=lp), | public | :: | M2Dgg_done | = | .false. |
Flag to set when M2D electrostatics for geometrical gradients have been computed. |
|
real(kind=rp), | public, | allocatable | :: | V_M2D(:,:) | |||
real(kind=rp), | public, | allocatable | :: | E_M2D(:,:,:) |
electric field of MM permanent multipoles at POL sites; |
||
real(kind=rp), | public, | allocatable | :: | Egrd_M2D(:,:,:) |
electric field of MM permanent multipoles at POL sites; |
||
real(kind=rp), | public, | allocatable | :: | EHes_M2D(:,:,:) | |||
logical(kind=lp), | public | :: | D2Mgg_done | = | .false. | ||
real(kind=rp), | public, | allocatable | :: | V_D2M(:) | |||
real(kind=rp), | public, | allocatable | :: | E_D2M(:,:) | |||
real(kind=rp), | public, | allocatable | :: | Egrd_D2M(:,:) | |||
real(kind=rp), | public, | allocatable | :: | EHes_D2M(:,:) | |||
logical(kind=lp), | public | :: | D2Dgg_done | = | .false. | ||
real(kind=rp), | public, | allocatable | :: | V_D2D(:,:) | |||
real(kind=rp), | public, | allocatable | :: | E_D2D(:,:,:) | |||
real(kind=rp), | public, | allocatable | :: | Egrd_D2D(:,:,:) | |||
real(kind=rp), | public, | allocatable | :: | EHes_D2D(:,:,:) | |||
logical(kind=lp), | public | :: | ipd_done | = | .false. |
Flag to set when IPD have been computed. |
|
logical(kind=lp), | public | :: | ipd_use_guess | = | .false. |
Flag to set when current value of IPD can be used as guess for next solution of LS. |
|
real(kind=rp), | public, | allocatable | :: | ipd(:,:,:) |
induced point dipoles (3:pol_atoms:ipd) |
||
real(kind=rp), | public, | allocatable | :: | TMat(:,:) |
Interaction tensor, only allocated for the methods that explicitly requires it. |
||
logical(kind=lp), | public | :: | screening_list_done | = | .false. |
Flag to check if screening list have already been prepared |
|
type(yale_sparse), | public, | allocatable | :: | list_S_S |
Sparse matrix containg the scale factors for the scaled elements |
||
type(yale_sparse), | public, | allocatable | :: | list_P_P |
Sparse matrix containg the scale factors for the scaled elements |
||
type(yale_sparse), | public, | allocatable | :: | list_S_P_P |
Sparse matrix containg the scale factors for the scaled elements |
||
type(yale_sparse), | public, | allocatable | :: | list_S_P_D |
Sparse matrix containg the scale factors for the scaled elements |
||
type(yale_sparse), | public, | allocatable | :: | list_S_S_fmm_far |
Sparse matrices containing the scale factors for the scaled elements |
||
type(yale_sparse), | public, | allocatable | :: | list_P_P_fmm_far |
Sparse matrices containing the scale factors for the scaled elements |
||
type(yale_sparse), | public, | allocatable | :: | list_S_P_P_fmm_far |
Sparse matrices containing the scale factors for the scaled elements |
||
type(yale_sparse), | public, | allocatable | :: | list_S_P_D_fmm_far |
Sparse matrices containing the scale factors for the scaled elements |
||
logical(kind=lp), | public, | dimension(:), allocatable | :: | todo_S_S |
Logical array of the same dimension of column-index vector; true if the scaling factor is zero, false otherwise |
||
logical(kind=lp), | public, | dimension(:), allocatable | :: | todo_P_P |
Logical array of the same dimension of column-index vector; true if the scaling factor is zero, false otherwise |
||
logical(kind=lp), | public, | dimension(:), allocatable | :: | todo_S_P_P |
Logical array of the same dimension of column-index vector; true if the scaling factor is zero, false otherwise |
||
logical(kind=lp), | public, | dimension(:), allocatable | :: | todo_S_P_D |
Logical array of the same dimension of column-index vector; true if the scaling factor is zero, false otherwise |
||
logical(kind=lp), | public, | dimension(:), allocatable | :: | todo_S_S_fmm_far |
Logical array of the same dimension of column-index vector; true if the scaling factor is zero, false otherwise |
||
logical(kind=lp), | public, | dimension(:), allocatable | :: | todo_P_P_fmm_far |
Logical array of the same dimension of column-index vector; true if the scaling factor is zero, false otherwise |
||
logical(kind=lp), | public, | dimension(:), allocatable | :: | todo_S_P_P_fmm_far |
Logical array of the same dimension of column-index vector; true if the scaling factor is zero, false otherwise |
||
logical(kind=lp), | public, | dimension(:), allocatable | :: | todo_S_P_D_fmm_far |
Logical array of the same dimension of column-index vector; true if the scaling factor is zero, false otherwise |
||
real(kind=rp), | public, | dimension(:), allocatable | :: | scalef_S_S_fmm_far |
Array of the same dimension of column-index vector; contains the value of the scaling factors different from 1.0 |
||
real(kind=rp), | public, | dimension(:), allocatable | :: | scalef_P_P_fmm_far |
Array of the same dimension of column-index vector; contains the value of the scaling factors different from 1.0 |
||
real(kind=rp), | public, | dimension(:), allocatable | :: | scalef_S_P_P_fmm_far |
Array of the same dimension of column-index vector; contains the value of the scaling factors different from 1.0 |
||
real(kind=rp), | public, | dimension(:), allocatable | :: | scalef_S_P_D_fmm_far |
Array of the same dimension of column-index vector; contains the value of the scaling factors different from 1.0 |
||
real(kind=rp), | public, | dimension(:), allocatable | :: | scalef_S_S |
Array of the same dimension of column-index vector; contains the value of the scaling factors different from 1.0 |
||
real(kind=rp), | public, | dimension(:), allocatable | :: | scalef_P_P |
Array of the same dimension of column-index vector; contains the value of the scaling factors different from 1.0 |
||
real(kind=rp), | public, | dimension(:), allocatable | :: | scalef_S_P_P |
Array of the same dimension of column-index vector; contains the value of the scaling factors different from 1.0 |
||
real(kind=rp), | public, | dimension(:), allocatable | :: | scalef_S_P_D |
Array of the same dimension of column-index vector; contains the value of the scaling factors different from 1.0 |
Utility function used to decide if an interaction between sites i and j should be computed and eventually scaled by a factor. This function is intended to be used in code, for linear scaling code lists should be built. This is written to minimize code repetitions, all the screening rules are handled in two possible cases: 1. rules based on adjacency matrix 2. rules based on AMOEBA polarization groups
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(in) | :: | eel |
Electrostatics object |
||
integer(kind=ip), | intent(in) | :: | i |
Index of source site (MM index is used for static sites, while Pol index is used for polarizable sites) |
||
character, | intent(in) | :: | kind_i |
Type of sites i and j in the interaction for which the screening rules are required; possible choices are 'P' (polarizable site) or 'S' (static site). Any other option will cause a fatal error. |
||
integer(kind=ip), | intent(in) | :: | j |
Index of target site (MM index is used for static sites, while Pol index is used for polarizable sites) |
||
character, | intent(in) | :: | kind_j |
Type of sites i and j in the interaction for which the screening rules are required; possible choices are 'P' (polarizable site) or 'S' (static site). Any other option will cause a fatal error. |
||
character, | intent(in) | :: | in_field |
Which screening rules have to be applied? 'D' = screening rules for direct field; 'P' = screening rules for polarization field |
Scale factor for the interaction
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(in) | :: | eel | |||
integer(kind=ip), | intent(in) | :: | i | |||
integer(kind=ip), | intent(in) | :: | j |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel_obj | |||
logical(kind=lp), | intent(in) | :: | amoeba | |||
integer(kind=ip), | intent(in) | :: | pol_atoms | |||
type(ommp_topology_type), | intent(in), | target | :: | top_obj |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel_obj |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel_obj | |||
integer(kind=ip), | intent(in) | :: | solver |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel_obj | |||
integer(kind=ip), | intent(in) | :: | matv |
Subroutine to initialize the screening parameters
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel_obj | |||
real(kind=rp), | intent(in) | :: | m(4) | |||
real(kind=rp), | intent(in) | :: | p(4) | |||
real(kind=rp), | intent(in) | :: | d(4) | |||
real(kind=rp), | intent(in) | :: | u(4) | |||
real(kind=rp), | intent(in), | optional | :: | i(4) |
Check which polarizabilities are close enough to 0 to be just excluded from the calculation, and remove them.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel |
This function computes the interaction energy of static electric multipoles
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel |
Electrostatics data structure |
||
real(kind=rp), | intent(inout) | :: | ene |
Energy (results will be added) |
This function computes the interaction energy of static electric multipoles
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel |
Electrostatics data structure |
||
real(kind=rp), | intent(inout) | :: | ene |
Energy (results will be added) |
This function compute the coulomb kernel for the distance vector dr and its derivative up to the value required by maxder.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp), | intent(in) | :: | dr(3) |
Distance vector from atom i to atom j |
||
integer(kind=ip), | intent(in) | :: | maxder |
Maximum derivative to be computed |
||
real(kind=rp), | intent(out), | dimension(maxder+1) | :: | res |
Results vector |
This subroutine computes the damped coulomb kernel between two atoms. Note that this only makes sense between two MM atoms, as it is only used to compute the field that induces the point dipoles!
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(in) | :: | eel |
Electrostatics data structure |
||
integer(kind=ip), | intent(in) | :: | i |
Index of atoms (in MM atom list) for which the kernel should be computed |
||
integer(kind=ip), | intent(in) | :: | j |
Index of atoms (in MM atom list) for which the kernel should be computed |
||
integer(kind=ip), | intent(in) | :: | maxder |
Maximum derivative to be computed |
||
real(kind=rp), | intent(out), | dimension(maxder+1) | :: | res |
Results vector |
|
real(kind=rp), | intent(out), | dimension(3) | :: | dr |
Distance vector between i and j |
TODO Computes the electric potential of a charge at position from the charge itself. Pre-computed kernel should be provided as input. The result is added to .
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp), | intent(in) | :: | q |
Charge |
||
real(kind=rp), | intent(in) | :: | dr(3) |
Distance vector |
||
real(kind=rp), | intent(in) | :: | kernel(:) |
Array of coulomb kernel (either damped or undamped) |
||
logical, | intent(in) | :: | do_V |
Flags to enable/disable calculation of different electrostatic properties |
||
real(kind=rp), | intent(inout) | :: | V |
Electric potential |
||
logical, | intent(in) | :: | do_E |
Flags to enable/disable calculation of different electrostatic properties |
||
real(kind=rp), | intent(inout) | :: | E(3) |
Electric potential |
||
logical, | intent(in) | :: | do_grdE |
Flags to enable/disable calculation of different electrostatic properties |
||
real(kind=rp), | intent(inout) | :: | grdE(6) |
Electric potential |
||
logical, | intent(in) | :: | do_HE |
Flags to enable/disable calculation of different electrostatic properties |
||
real(kind=rp), | intent(inout) | :: | HE(10) |
Electric potential |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp), | intent(in) | :: | mu(3) |
point dipole |
||
real(kind=rp), | intent(in) | :: | dr(3) |
Distance vector |
||
real(kind=rp), | intent(in) | :: | kernel(:) |
Array of coulomb kernel (either damped or undamped) |
||
logical, | intent(in) | :: | do_V |
Flags to enable/disable calculation of different electrostatic properties |
||
real(kind=rp), | intent(inout) | :: | V |
Electric potential |
||
logical, | intent(in) | :: | do_E |
Flags to enable/disable calculation of different electrostatic properties |
||
real(kind=rp), | intent(inout) | :: | E(3) |
Electric potential |
||
logical, | intent(in) | :: | do_grdE |
Flags to enable/disable calculation of different electrostatic properties |
||
real(kind=rp), | intent(inout) | :: | grdE(6) |
Electric potential |
||
logical, | intent(in) | :: | do_HE |
Flags to enable/disable calculation of different electrostatic properties |
||
real(kind=rp), | intent(inout) | :: | HE(10) |
Electric potential |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rp), | intent(in) | :: | quad(6) |
point quadrupole stored as (xx, xy, yy, xz, yz, zz) |
||
real(kind=rp), | intent(in) | :: | dr(3) |
Distance vector |
||
real(kind=rp), | intent(in) | :: | kernel(:) |
Array of coulomb kernel (either damped or undamped) |
||
logical, | intent(in) | :: | do_V |
Flags to enable/disable calculation of different electrostatic properties |
||
real(kind=rp), | intent(inout) | :: | V |
Electric potential |
||
logical, | intent(in) | :: | do_E |
Flags to enable/disable calculation of different electrostatic properties |
||
real(kind=rp), | intent(inout) | :: | E(3) |
Electric potential |
||
logical, | intent(in) | :: | do_grdE |
Flags to enable/disable calculation of different electrostatic properties |
||
real(kind=rp), | intent(inout) | :: | grdE(6) |
Electric potential |
||
logical, | intent(in) | :: | do_HE |
Flags to enable/disable calculation of different electrostatic properties |
||
real(kind=rp), | intent(inout) | :: | HE(10) |
Electric potential |
This function allocate and populate array of electrostatic properties of static multipoles at static multipoles sites. It should be called blindly before any calculation that requires V_M2M etc.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel | |||
logical, | intent(in), | optional | :: | arg_dogg |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel | |||
logical, | intent(in), | optional | :: | arg_dogg |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel |
Electrostatics data structure |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(in) | :: | eel |
Electrostatics data structure |
||
type(fmm_type), | intent(inout) | :: | fmm |
fmm object used to run the calculation |
||
real(kind=rp), | intent(in) | :: | ipd(3,eel%pol_atoms) |
External induced point dipoles at polarizable sites |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel |
Electrostatics data structure |
||
integer(kind=ip), | intent(in) | :: | knd |
Index for the set of dipoles to use. |
Computes the electric potential, field and field gradients of static multipoles at all sites (polarizable sites are a subset of static ones)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel |
Electrostatics data structure |
||
logical, | intent(in) | :: | do_V |
Flags to enable/disable the calculation of different components |
||
logical, | intent(in) | :: | do_E |
Flags to enable/disable the calculation of different components |
||
logical, | intent(in) | :: | do_Egrd |
Flags to enable/disable the calculation of different components |
||
logical, | intent(in) | :: | do_EHes |
Flags to enable/disable the calculation of different components |
Computes the electric field of a trial set of induced point dipoles at polarizable sites. This is intended to be used as matrix-vector routine in the solution of the linear system.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(in) | :: | eel |
Data structure for electrostatic part of the system |
||
real(kind=rp), | intent(in) | :: | ext_ipd(3,eel%pol_atoms) |
External induced point dipoles at polarizable sites |
||
real(kind=rp), | intent(inout) | :: | E(3,eel%pol_atoms) |
Electric field (results will be added) |
Computes the electric field of a trial set of induced point dipoles at polarizable sites. This is intended to be used as matrix-vector routine in the solution of the linear system.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel |
Data structure for electrostatic part of the system |
||
character, | intent(in) | :: | in_kind | |||
logical, | intent(in) | :: | do_V |
Flag to control which properties have to be computed. |
||
logical, | intent(in) | :: | do_E |
Flag to control which properties have to be computed. |
||
logical, | intent(in) | :: | do_Egrd |
Flag to control which properties have to be computed. |
||
logical, | intent(in) | :: | do_EHes |
Flag to control which properties have to be computed. |
Computes the electric field of static multipoles at induced dipoles sites. This is only intended to be used to build the RHS of the linear system. This field is modified by the indroduction of the damped kernels and by the connectivity-based screening rules.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel |
Electrostatics data structure |
||
logical, | intent(in) | :: | do_V |
Flag to control which properties have to be computed. |
||
logical, | intent(in) | :: | do_E |
Flag to control which properties have to be computed. |
||
logical, | intent(in) | :: | do_Egrd |
Flag to control which properties have to be computed. |
||
logical, | intent(in) | :: | do_EHes |
Flag to control which properties have to be computed. |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel |
Electrostatics data structure |
||
character, | intent(in) | :: | in_kind | |||
logical, | intent(in) | :: | do_V |
Flag to control which properties have to be computed. |
||
logical, | intent(in) | :: | do_E |
Flag to control which properties have to be computed. |
||
logical, | intent(in) | :: | do_Egrd |
Flag to control which properties have to be computed. |
||
logical, | intent(in) | :: | do_EHes |
Flag to control which properties have to be computed. |
This subroutine computes the potential generated by the induced point dipoles to a set of arbitrary coordinates, without applying any screening rules. Note: for AMOEBA D dipoles should be used.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(in) | :: | eel |
Electrostatics data structure |
||
real(kind=rp), | intent(in) | :: | cpt(:,:) |
Coordinates at which the electric field is requested |
||
real(kind=rp), | intent(inout) | :: | V(:) |
Electric field (results will be added) |
||
logical, | intent(in), | optional | :: | amoeba_P_insted_of_D_ |
For AMOEBA FF, if true the potential of P dipoles is computed, otherwise potential of D dipoles is computed |
This subroutine computes the potential generated by the static multipoles to a set of arbitrary coordinates, without applying any screening rules.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(in) | :: | eel |
Electrostatics data structure |
||
real(kind=rp), | intent(in) | :: | cpt(:,:) |
Coordinates at which the electric field is requested |
||
real(kind=rp), | intent(inout) | :: | V(:) |
Electric field (results will be added) |
This subroutine computes the potential generated by the static multipoles to a set of arbitrary coordinates, without applying any screening rules.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(in) | :: | eel |
Electrostatics data structure |
||
real(kind=rp), | intent(in) | :: | cpt(:,:) |
Coordinates at which the electric field is requested |
||
real(kind=rp), | intent(inout) | :: | E(:,:) |
Electric field (results will be added) |
This subroutine computes the potential generated by the static multipoles to a set of arbitrary coordinates, without applying any screening rules.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(in) | :: | eel |
Electrostatics data structure |
||
real(kind=rp), | intent(in) | :: | cpt(:,:) |
Coordinates at which the electric field is requested |
||
real(kind=rp), | intent(inout) | :: | E(:,:) |
Electric field (results will be added) |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(inout) | :: | eel |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(fmm_type), | intent(inout) | :: | fmm_obj |
FMM object, it should be already initialized |
||
real(kind=rp), | intent(in) | :: | q(:) | |||
logical(kind=lp), | intent(in) | :: | use_q | |||
real(kind=rp), | intent(in) | :: | mu(:,:) | |||
logical(kind=lp), | intent(in) | :: | use_mu | |||
real(kind=rp), | intent(in) | :: | quad(:,:) | |||
logical(kind=lp), | intent(in) | :: | use_quad |