37 #define MAX_GO_CHAINS 10
38 #define MAX_RESTRICTIONS 10
41 #include "molfile_plugin.h"
100 int lookup(
const char *segid,
int resid,
int *begin,
int *end)
const;
126 #define QMLSSMODEDIST 1
127 #define QMLSSMODECOM 2
129 #define QMFormatORCA 1
130 #define QMFormatMOPAC 2
131 #define QMFormatUSR 3
134 #define QMCHRGMULLIKEN 1
135 #define QMCHRGCHELPG 2
138 #define QMSCHEMERCD 2
154 typedef struct constraint_params
163 typedef struct gridfrc_params
171 typedef struct stir_params
177 typedef struct movdrag_params
183 typedef struct rotdrag_params
190 typedef struct constorque_params
197 #ifdef MEM_OPT_VERSION
204 return aid1 < a.aid1;
209 void load_atom_set(
StringList *setfile,
const char *setname,
210 int *numAtomsInSet, Molecule::AtomSetList **atomsSet)
const;
229 #ifndef MEM_OPT_VERSION
248 int32 **bondsWithAtom;
253 int32 **anglesByAtom;
254 int32 **dihedralsByAtom;
255 int32 **impropersByAtom;
256 int32 **crosstermsByAtom;
259 int32 **fullExclusionsByAtom;
260 int32 **modExclusionsByAtom;
262 int32 **gromacsPairByAtom;
269 int32 **tholesByAtom;
270 int32 **anisosByAtom;
277 Index *eachAtomCharge;
291 AtomSetList *fixedAtomsSet;
292 AtomSetList *constrainedAtomsSet;
307 int32 *lphostIndexes;
311 ConstraintParams *consParams;
314 int32 **gridfrcIndexes;
315 GridforceParams **gridfrcParams;
321 StirParams *stirParams;
323 int32 *movDragIndexes;
324 MovDragParams *movDragParams;
326 int32 *rotDragIndexes;
327 RotDragParams *rotDragParams;
330 Real *langevinParams;
331 int32 *fixedAtomFlags;
332 int32 *exPressureAtomFlags;
340 Real *rigidBondLengths;
343 unsigned char *fepAtomFlags;
347 unsigned char *ssAtomFlags;
367 #ifndef MEM_OPT_VERSION
375 void read_bonds(FILE *);
387 void read_donors(FILE *);
389 void read_acceptors(FILE *);
391 void read_exclusions(FILE *);
394 void read_exclusions(
int*,
int*,
int);
401 void read_lphosts(FILE *);
403 void read_anisos(FILE *);
413 void assignLCPOTypes(
int inputType);
416 void plgLoadAtomBasics(molfile_atom_t *atomarray);
417 void plgLoadBonds(
int *from,
int *to);
418 void plgLoadAngles(
int *plgAngles);
419 void plgLoadDihedrals(
int *plgDihedrals);
420 void plgLoadImpropers(
int *plgImpropers);
421 void plgLoadCrossterms(
int *plgCterms);
427 void build_lists_by_atom();
430 void build12excl(
void);
431 void build13excl(
void);
432 void build14excl(
int);
435 void build_inherited_excl(
int);
437 void stripFepExcl(
void);
439 void build_exclusions();
442 void build_atom_status(
void);
449 void build_excl_check_signatures();
480 return lcpoParamType;
484 return drudeConsts[i].
alpha;
487 #ifdef MEM_OPT_VERSION
501 return s_NumFixedAtoms;
508 return s_NumFixedGroups;
516 if (s_NumFixedGroups) s_NumGroupDegFreedom -= 3 * s_NumFixedGroups;
519 s_NumGroupDegFreedom -= 3;
521 return s_NumGroupDegFreedom;
526 int64_t s_NumDegFreedom = 3 * (int64_t)
numAtoms;
528 if (s_NumFixedAtoms) s_NumDegFreedom -= 3 * s_NumFixedAtoms;
532 s_NumDegFreedom -= 3;
534 if ( ! isInitialReport &&
simParams->pairInteractionOn) {
541 int s_NumFixedRigidBonds =
554 return s_NumDegFreedom;
696 int qmDroppedBonds, qmDroppedAngles, qmDroppedDihedrals;
697 int qmDroppedImpropers, qmDroppedCrossterms;
704 char **qmElementArray;
706 char **qmDummyElement;
739 int **qmMMBondedIndx ;
742 int **qmMMChargeTarget;
774 int qmLSSResidueSize;
786 int qmLSSTotalNumAtms;
789 std::map<int,int> qmClassicSolv ;
794 void read_qm_csdm_file(std::map<Real,int> &qmGrpIDMap) ;
938 #ifdef MEM_OPT_VERSION
940 void load_constrained_atoms(
StringList *constrainedFile);
1017 #ifdef MEM_OPT_VERSION
1020 int get_cluster_size_con(
int aid)
const {
return clusterSigs[aid]; }
1023 int get_cluster_size_uncon(
int cIdx)
const {
return clusterSize[cIdx]; }
1024 int get_cluster_idx(
int aid)
const {
return clusterSigs[aid]; }
1025 int get_num_clusters()
const {
return numClusters; }
1031 #ifndef MEM_OPT_VERSION
1044 #ifdef MEM_OPT_VERSION
1045 return atomMassPool[eachAtomMass[anum]];
1047 return(
atoms[anum].mass);
1054 #ifdef MEM_OPT_VERSION
1055 return atomChargePool[eachAtomCharge[anum]];
1064 return(
atoms[anum].vdw_type);
1067 #ifndef MEM_OPT_VERSION
1088 int index = lphostIndexes[atomid];
1089 return (index != -1 ? &(lphosts[index]) : NULL);
1093 #ifndef MEM_OPT_VERSION
1115 #ifndef MEM_OPT_VERSION
1122 if (atomNames == NULL)
1124 NAMD_die(
"Tried to find atom type on node other than node 0");
1127 #ifdef MEM_OPT_VERSION
1130 return(atomNames[anum].atomtype);
1148 #ifndef MEM_OPT_VERSION
1150 {
return bondsByAtom[anum]; }
1152 {
return anglesByAtom[anum]; }
1154 {
return dihedralsByAtom[anum]; }
1156 {
return impropersByAtom[anum]; }
1158 {
return crosstermsByAtom[anum]; }
1162 {
return fullExclusionsByAtom[anum]; }
1164 {
return modExclusionsByAtom[anum]; }
1169 #ifdef MEM_OPT_VERSION
1170 int checkExclByIdx(
int idx1,
int atom1,
int atom2)
const;
1172 return &exclChkSigPool[idx];
1175 int checkexcl(
int atom1,
int atom2)
const;
1178 return &all_exclusions[anum];
1189 return(gridfrcIndexes[gridnum][atomnum] != -1);
1198 #ifndef MEM_OPT_VERSION
1206 return(consIndexes[atomnum] != -1);
1223 return(movDragIndexes[atomnum] != -1);
1239 return(rotDragIndexes[atomnum] != -1);
1264 #ifndef MEM_OPT_VERSION
1268 k = consParams[consIndexes[atomnum]].k;
1269 refPos = consParams[consIndexes[atomnum]].refPos;
1276 k = gridfrcParams[gridnum][gridfrcIndexes[gridnum][atomnum]].k;
1277 q = gridfrcParams[gridnum][gridfrcIndexes[gridnum][atomnum]].q;
1284 result = gridfrcGrid[gridnum];
1292 gridfrcGrid[gridnum] = grid;
1302 return(langevinParams ? langevinParams[atomnum] : 0.);
1308 refPos = stirParams[stirIndexes[atomnum]].refPos;
1314 stirParams[stirIndexes[atomnum]].startTheta = theta;
1320 return stirParams[stirIndexes[atomnum]].startTheta;
1327 v = movDragParams[movDragIndexes[atomnum]].v;
1334 v = rotDragParams[rotDragIndexes[atomnum]].v;
1335 a = rotDragParams[rotDragIndexes[atomnum]].a;
1336 p = rotDragParams[rotDragIndexes[atomnum]].p;
1351 return(fepAtomFlags[anum]);
1357 return(ssAtomFlags[anum]);
1392 for (
int i=0; i <
order; ++i ) {
1393 typeSum += (fepAtomFlags[atomID[i]] == 2 ? -1 : fepAtomFlags[atomID[i]]);
1397 if (
simParams->alchBondDecouple ) order++;
1400 if ( typeSum == 0 || abs(typeSum) ==
order )
return 0;
1401 else if ( 0 < typeSum && typeSum < order )
return 1;
1402 else if ( -order < typeSum && typeSum < 0 )
return 2;
1405 NAMD_die(
"Unexpected alchemical bonded interaction!");
1410 #ifndef MEM_OPT_VERSION
1423 Bool is_atom_in_set(AtomSetList *localAtomsSet,
int aid,
int *listIdx)
const;
1425 return is_atom_in_set(fixedAtomsSet,aid,listIdx);
1428 return is_atom_in_set(constrainedAtomsSet,aid,listIdx);
1437 return(stirIndexes[atomnum] != -1);
1459 return(rigidBondLengths[atomnum]);
1471 #ifdef MEM_OPT_VERSION
1475 void read_binary_atom_info(
int fromAtomID,
int toAtomID,
InputAtomList &inAtoms);
1480 Index getEachAtomMass(
int i){
return eachAtomMass[i];}
1481 Index getEachAtomCharge(
int i){
return eachAtomCharge[i];}
1483 ExclSigID getAtomExclSigId(
int aid)
const {
1484 return eachAtomExclSig[aid];
1487 Real *getAtomMassPool(){
return atomMassPool;}
1488 Real *getAtomChargePool(){
return atomChargePool;}
1491 int atomSigPoolSize;
1496 int segNamePoolSize;
1499 int resNamePoolSize;
1502 int atomNamePoolSize;
1505 int atomTypePoolSize;
1509 Real *atomChargePool;
1515 return eachAtomSig[aid];
1519 int exclSigPoolSize;
1525 void addNewExclSigPool(
const std::vector<ExclusionSignature>&);
1527 void delEachAtomSigs(){
1533 if(CmiMyRank())
return;
1535 delete [] eachAtomSig;
1536 delete [] eachAtomExclSig;
1538 eachAtomExclSig = NULL;
1541 void delChargeSpace(){
1542 if(CmiMyRank())
return;
1544 delete [] atomChargePool;
1545 delete [] eachAtomCharge;
1546 atomChargePool = NULL;
1547 eachAtomCharge = NULL;
1550 void delMassSpace(){
1551 if(CmiMyRank())
return;
1553 delete [] atomMassPool;
1554 delete [] eachAtomMass;
1555 atomMassPool = NULL;
1556 eachAtomMass = NULL;
1559 void delClusterSigs() {
1560 if(CmiMyRank())
return;
1562 delete [] clusterSigs;
1566 void delAtomNames(){
1567 if(CmiMyRank())
return;
1569 delete [] atomNames;
1574 void delFixedAtoms(){
1575 if(CmiMyRank())
return;
1576 delete fixedAtomsSet;
1577 fixedAtomsSet = NULL;
int32 * get_exclusions_for_atom(int anum)
BigReal get_gro_force(BigReal, BigReal, BigReal, int, int) const
int get_atom_from_name(const char *segid, int resid, const char *aname) const
int get_residue_size(const char *segid, int resid) const
void build_gridforce_params(StringList *, StringList *, StringList *, StringList *, PDB *, char *)
BigReal tail_corr_virial_2
int num_alch_unpert_Dihedrals
int get_go_exp_a(int chain1, int chain2)
Bond * getAllAcceptors() const
Real langevin_param(int atomnum) const
void get_stir_refPos(Vector &refPos, int atomnum) const
Real get_go_cutoff(int chain1, int chain2)
int32 * get_dihedrals_for_atom(int anum)
const int * get_qmMMNumTargs()
int32 * get_crossterms_for_atom(int anum)
void print_bonds(Parameters *)
int get_qmNumGrps() const
void send_GoMolecule(MOStream *)
Bool is_atom_movdragged(int atomnum) const
const int * get_qmGrpNumBonds()
BigReal get_go_force_new(BigReal, int, int, BigReal *, BigReal *) const
void build_extra_bonds(Parameters *parameters, StringList *file)
void setOccupancyData(molfile_atom_t *atomarray)
const int * get_qmAtmIndx()
BigReal get_gro_force2(BigReal, BigReal, BigReal, int, int, BigReal *, BigReal *) const
BigReal tail_corr_virial_1
void receive_GoMolecule(MIStream *)
void read_alch_unpert_dihedrals(FILE *)
int numAnisos
Number of anisotropic terms.
Bool is_hydrogenGroupParent(int)
Angle * alch_unpert_angles
void send_Molecule(MOStream *)
Real get_go_epsilonRep(int chain1, int chain2)
const int32 * get_mod_exclusions_for_atom(int anum) const
Improper * get_improper(int inum) const
static __thread unsigned int * exclusions
static __thread atom * atoms
int num_alch_unpert_Bonds
const int *const * get_qmMMBondedIndx()
Real get_stir_startTheta(int atomnum) const
static __thread int2 * exclusionsByAtom
Real rigid_bond_length(int atomnum) const
int get_atom_from_index_in_residue(const char *segid, int resid, int index) const
void setBFactorData(molfile_atom_t *atomarray)
Bond * getAllDonors() const
Real get_qmAtomGroup(int indx) const
int num_alch_unpert_Angles
Crossterm * getAllCrossterms() const
int get_cluster(int anum) const
void reloadCharges(float charge[], int n)
int get_fep_bonded_type(const int *atomID, unsigned int order) const
int const * get_cSMDindxLen()
int num_fixed_atoms() const
void get_gridfrc_params(Real &k, Charge &q, int atomnum, int gridnum) const
struct seg_resid AtomSegResInfo
std::map< int, int > & get_qmMMSolv()
Dihedral * alch_unpert_dihedrals
const char *const * get_qmDummyElement()
void read_go_file(char *)
Crossterm * get_crossterm(int inum) const
void build_go_arrays(StringList *, char *)
int64_t num_deg_freedom(int isInitialReport=0) const
int32 * get_angles_for_atom(int anum)
Bond * get_donor(int dnum) const
const int *const * get_qmGrpBonds()
Real get_go_epsilon(int chain1, int chain2)
int const *const * get_cSMDpairs()
void get_constorque_params(BigReal &v, Vector &a, Vector &p, int atomnum) const
int32 * consTorqueIndexes
HydrogenGroup hydrogenGroup
void build_langevin_params(BigReal coupling, BigReal drudeCoupling, Bool doHydrogen)
const Real * get_qmAtomGroup() const
const char * get_atomtype(int anum) const
Bool is_atom_rotdragged(int atomnum) const
int const * getLcpoParamType()
Bool is_atom_stirred(int atomnum) const
Bool is_atom_constorqued(int atomnum) const
BigReal getEnergyTailCorr(const BigReal, const int)
int numLonepairs
Number of lone pairs.
Lphost * get_lphost(int atomid) const
Real get_go_sigmaRep(int chain1, int chain2)
int64 numCalcFullExclusions
BigReal get_go_force(BigReal, int, int, BigReal *, BigReal *) const
Dihedral * get_dihedral(int dnum) const
int64_t num_group_deg_freedom() const
const float * getBFactorData()
int checkexcl(int atom1, int atom2) const
int32 * get_impropers_for_atom(int anum)
int get_go_exp_rep(int chain1, int chain2)
void build_constraint_params(StringList *, StringList *, StringList *, PDB *, char *)
void build_constorque_params(StringList *, StringList *, StringList *, StringList *, StringList *, StringList *, PDB *, char *)
GoValue go_array[MAX_GO_CHAINS *MAX_GO_CHAINS]
void read_alch_unpert_bonds(FILE *)
unsigned char get_ss_type(int anum) const
int numTholes
Number of Thole terms.
int32 * get_bonds_for_atom(int anum)
const int *const * get_qmMMBond()
void set_qm_replaceAll(Bool newReplaceAll)
int lookup(const char *segid, int resid, int *begin, int *end) const
void prepare_qm(const char *pdbFileName, Parameters *params, ConfigList *cfgList)
Bool go_restricted(int, int, int)
Bond * get_bond(int bnum) const
void build_stirred_atoms(StringList *, StringList *, PDB *, char *)
const float * getOccupancyData()
const Real * get_cSMDcoffs()
GridforceGrid * get_gridfrc_grid(int gridnum) const
void NAMD_die(const char *err_msg)
HashPool< HashString > atomNamePool
BigReal getVirialTailCorr(const BigReal)
void build_ss_flags(const StringList *ssfile, const StringList *sscol, PDB *initial_pdb, const char *cwd)
void build_rotdrag_params(StringList *, StringList *, StringList *, StringList *, StringList *, StringList *, PDB *, char *)
HashPool< HashString > resNamePool
bool operator<(const intpair &lhs, const intpair &rhs)
ConsTorqueParams * consTorqueParams
AtomNameInfo * getAtomNames() const
int maxMigrationGroupSize
void put_stir_startTheta(Real theta, int atomnum) const
const int *const * get_qmMMChargeTarget()
int * get_qmCustPCSizes()
void build_fep_flags(StringList *, StringList *, PDB *, char *, const char *)
unsigned char get_fep_type(int anum) const
const char *const * get_qmElements()
ResidueLookupElem * append(const char *segid, int resid, int aid)
Bool is_group_fixed(int atomnum) const
void build_alch_unpert_bond_lists(char *)
Bool is_atom_constrained(int atomnum) const
void build_fixed_atoms(StringList *, StringList *, PDB *, char *)
void get_cons_params(Real &k, Vector &refPos, int atomnum) const
const Real * get_cSMDKs()
void compute_LJcorrection()
int num_fixed_groups() const
int get_go_exp_b(int chain1, int chain2)
Dihedral * getAllDihedrals() const
AtomSegResInfo * getAtomSegResInfo() const
Exclusion * get_exclusion(int ex) const
Index atomvdwtype(int anum) const
void print_atoms(Parameters *)
BigReal get_go_force2(BigReal, BigReal, BigReal, int, int, BigReal *, BigReal *) const
void get_movdrag_params(Vector &v, int atomnum) const
int go_indices[MAX_GO_CHAINS+1]
void build_go_sigmas(StringList *, char *)
void get_rotdrag_params(BigReal &v, Vector &a, Vector &p, int atomnum) const
Real atomcharge(int anum) const
HashPool< HashString > segNamePool
void delete_alch_bonded(void)
HashPool< HashString > atomTypePool
void build_exPressure_atoms(StringList *, StringList *, PDB *, char *)
int numZeroMassAtoms
Number of atoms with zero mass.
const ExclusionCheck * get_excl_check_for_atom(int anum) const
void build_constant_forces(char *)
k< npairi;++k){TABENERGY(const int numtypes=simParams->tableNumTypes;const float table_spacing=simParams->tableSpacing;const int npertype=(int)(namdnearbyint(simParams->tableMaxDist/simParams->tableSpacing)+1);) int table_i=(r2iilist[2 *k] >> 14)+r2_delta_expc;const int j=pairlisti[k];#define p_j BigReal diffa=r2list[k]-r2_table[table_i];#define table_four_i TABENERGY(register const int tabtype=-1-(lj_pars->A< 0?lj_pars->A:0);) BigReal kqq=kq_i *p_j-> charge
int * get_qmCustomPCIdxs()
Angle * getAllAngles() const
int set_gridfrc_grid(int gridnum, GridforceGrid *grid)
Real atommass(int anum) const
const Real * get_cSMDVels()
int numDrudeAtoms
Number of Drude particles.
Bool is_atom_exPressure(int atomnum) const
int restrictions[MAX_RESTRICTIONS]
Bool atoms_1to4(unsigned int, unsigned int)
Bool is_atom_fixed(int atomnum) const
BigReal GetAtomAlpha(int i) const
void receive_Molecule(MIStream *)
void build_movdrag_params(StringList *, StringList *, StringList *, PDB *, char *)
int numLphosts
Number of lone pair host records in PSF.
Lphost * getAllLphosts() const
Angle * get_angle(int anum) const
int const *const * get_cSMDindex()
Mass * get_qmLSSRefMass()
Bond * getAllBonds() const
const BigReal * get_qmDummyBondVal()
const int32 * get_full_exclusions_for_atom(int anum) const
Improper * getAllImpropers() const
int get_clusterSize(int anum) const
ResizeArray< int > atomIndex
Molecule(SimParameters *, Parameters *param)
Bool is_atom_gridforced(int atomnum, int gridnum) const
const int * get_qmGrpSizes()
HashPool< AtomSigInfo > atomSigPool
Bond * get_acceptor(int dnum) const
void build_go_params(StringList *)
void build_go_sigmas2(StringList *, char *)
void read_alch_unpert_angles(FILE *)