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 |
type ommp_electrostatics_type
integer(ip) :: def_solver
!! Solver to be used by default for this eel object.
integer(ip) :: def_matv
!! Matrix-vector method to be used by default for this eel object.
type(ommp_topology_type), pointer :: top
!! Data structure containing all the topological informations
integer(ip) :: pol_atoms
!! number of polarizable atoms
logical(lp) :: amoeba
!! True if AMOEBA FF is used
integer(ip) :: ld_cart, 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(ip) :: n_ipd
!! number of induced point dipoles distributions
!! this is 1 for AMBER and 2 for AMOEBA
real(rp) :: mscale(4)
!! factors for charge-charge (or multipole-multipole) interactions
real(rp) :: 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(rp) :: pscale_intra(4)
!! Only used for AMOEBA, same as pscale but for atoms that belong to the
!! same polarization group
real(rp) :: 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(rp) :: uscale(4)
!! factor for ipd-ipd interactions. these depend on the connectivity (AMBER)
!! or on the polarization group " connectivity (AMOEBA)
! allocatable arrays which describe the polarizable system
real(rp), allocatable :: thole(:)
!! array to store the thole factors for computing damping functions
real(rp) :: 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(rp), allocatable :: cpol(:,:)
!! Coordinates of polarizable atoms (3:pol_atoms)
real(rp), 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(rp), allocatable :: q0(:,:)
!! Unrotated utlipolar distribution (ld_cart:mm_atoms)
!! (AMOEBA only)
real(rp), allocatable :: pol(:)
!! Polarizabilities for each polarizable atom
integer(ip), allocatable :: mm_polar(:)
!! for each mm atom: 0 if is not polarizable, index in
!! polarizable atom list otherwise
integer(ip), allocatable :: polar_mm(:)
!! positions of a polarizable atom in the mm atoms list
integer(ip), allocatable :: C_polar_mm(:)
!! [[polar_mm]] with 0-based C-indexing, only allocated at need.
integer(ip), allocatable :: mmat_polgrp(:)
!! Polarizability group index for each MM site
type(yale_sparse) :: 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), 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.
! parameters for the definition of the rotation matrices for the multipoles:
integer(ip), 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(ip), allocatable :: ix(:), iy(:), iz(:)
!! neighboring atoms used to define the axes of the molecular frame
!- FMM quantities here
logical(lp) :: use_fmm = .false.
!! flag to use fast multipoles
integer(ip) :: fmm_maxl_static = 0
!! Maximum angular moment used in fast multipoles for fixed part
integer(ip) :: fmm_maxl_pol = 0
!! Maximum angular moment used in fast multipoles for polarizable part
real(rp) :: fmm_min_cell_size = 0.0
!! Minimum dimension for cell size used in FMM
real(rp) :: fmm_distance = 0.0
!! Threshold distance for considering two nodes in FMM tree as far
type(fmm_type), allocatable :: fmm_static
!! Fast multipoles object for static multipoles sources
logical(lp) :: fmm_static_done = .false.
!! Flag for a fresh solution of ipd fmm
type(fmm_type), allocatable :: fmm_ipd(:)
!! Fast multipoles object for static multipoles sources
logical(lp), allocatable :: fmm_ipd_done(:)
!! Flag for a fresh solution of ipd fmm
type(fmm_tree_type), allocatable :: tree
!! Tree object
type(yale_sparse) :: fmm_near_field_list
!! For each particle, all the particles that should be included in near field
!- Intermediate data allocate here -!
logical(lp) :: M2M_done = .false.
!! flag to set when M2M electrostatic quantities are computed.
logical(lp) :: M2Mgg_done = .false.
!! flag to set when M2M electrostatic quantities for geometrical
!! gradients are computed.
real(rp), allocatable :: V_M2M(:)
!! potential of MM permanent multipoles at MM sites;
real(rp), allocatable :: E_M2M(:,:)
!! electric_field of MM permanent multipoles at MM sites;
real(rp), allocatable :: Egrd_M2M(:,:)
!! electric_field gradient of MM permanent multipoles at MM sites;
real(rp), allocatable :: EHes_M2M(:,:)
!! electric field Hessian of MM permanent multipoles at MM sites;
logical(lp) :: M2D_done = .false.
!! Flag to set when M2D electrostatics have been computed.
logical(lp) :: M2Dgg_done = .false.
!! Flag to set when M2D electrostatics for geometrical gradients
!! have been computed.
real(rp), allocatable :: V_M2D(:,:)
! electrostatic potential of MM permanent multipoles at POL sites; unused.
real(rp), allocatable :: E_M2D(:,:,:) ! TODO the third dimension is used?
!! electric field of MM permanent multipoles at POL sites;
real(rp), allocatable :: Egrd_M2D(:,:,:)
!! electric field of MM permanent multipoles at POL sites;
real(rp), allocatable :: EHes_M2D(:,:,:)
! electric field Hessian of MM permanent multipoles at POL sites; unused.
logical(lp) :: D2Mgg_done = .false.
real(rp), allocatable :: V_D2M(:)
real(rp), allocatable :: E_D2M(:,:)
real(rp), allocatable :: Egrd_D2M(:,:)
real(rp), allocatable :: EHes_D2M(:,:)
logical(lp) :: D2Dgg_done = .false.
real(rp), allocatable :: V_D2D(:,:)
real(rp), allocatable :: E_D2D(:,:,:)
real(rp), allocatable :: Egrd_D2D(:,:,:)
real(rp), allocatable :: EHes_D2D(:,:,:)
logical(lp) :: ipd_done = .false.
!! Flag to set when IPD have been computed.
logical(lp) :: ipd_use_guess = .false.
!! Flag to set when current value of IPD can be
!! used as guess for next solution of LS.
real(rp), allocatable :: ipd(:,:,:)
!! induced point dipoles (3:pol_atoms:ipd)
real(rp), allocatable :: TMat(:,:)
!! Interaction tensor, only allocated for the methods that explicitly
!! requires it.
logical(lp) :: screening_list_done = .false.
!! Flag to check if screening list have already been prepared
type(yale_sparse), allocatable :: list_S_S, list_P_P, list_S_P_P, list_S_P_D
!! Sparse matrix containg the scale factors for the scaled elements
!! of electrostatic interactions (all the element that are not
!! present in the sparse matrix have a scaling factor 1.0).
!! When FMM are enabled, those lists are only for near-field
!! interactions
type(yale_sparse), allocatable :: list_S_S_fmm_far, &
list_P_P_fmm_far, &
list_S_P_P_fmm_far, &
list_S_P_D_fmm_far
!! Sparse matrices containing the scale factors for the scaled elements
!! of electrostatic far-field interactions (only when FMM are
!! enabled). If a reasonable FMM distance is chosen, those lists
!! should be almost empty.
logical(lp), dimension(:), allocatable :: todo_S_S, todo_P_P, todo_S_P_P, todo_S_P_D
!! Logical array of the same dimension of column-index vector; true if
!! the scaling factor is zero, false otherwise
logical(lp), dimension(:), allocatable :: todo_S_S_fmm_far, todo_P_P_fmm_far, &
todo_S_P_P_fmm_far, 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(rp), dimension(:), allocatable :: scalef_S_S_fmm_far, scalef_P_P_fmm_far, &
scalef_S_P_P_fmm_far, 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(rp), dimension(:), allocatable :: scalef_S_S, scalef_P_P, &
scalef_S_P_P, scalef_S_P_D
!! Array of the same dimension of column-index vector; contains the
!! value of the scaling factors different from 1.0
end type ommp_electrostatics_type