31 #include "molfile_plugin.h" 33 #define MAX_GO_CHAINS 10 34 #define MAX_RESTRICTIONS 10 99 int lookup(
const char *segid,
int resid,
int *begin,
int *end)
const;
125 #define QMLSSMODEDIST 1 126 #define QMLSSMODECOM 2 128 #define QMFormatORCA 1 129 #define QMFormatMOPAC 2 130 #define QMFormatUSR 3 133 #define QMCHRGMULLIKEN 1 134 #define QMCHRGCHELPG 2 137 #define QMSCHEMERCD 2 142 #define LARGEMOLTH 64 // threshhold to determin large molecule 177 typedef struct constraint_params
186 typedef struct gridfrc_params
194 typedef struct stir_params
200 typedef struct movdrag_params
206 typedef struct rotdrag_params
213 typedef struct constorque_params
220 #ifdef MEM_OPT_VERSION 227 return aid1 < a.aid1;
232 void load_atom_set(
StringList *setfile,
const char *setname,
233 int *numAtomsInSet, Molecule::AtomSetList **atomsSet)
const;
253 #ifndef MEM_OPT_VERSION 272 int32 **bondsWithAtom;
277 int32 **anglesByAtom;
278 int32 **dihedralsByAtom;
279 int32 **impropersByAtom;
280 int32 **crosstermsByAtom;
282 int32 **exclusionsByAtom;
283 int32 **fullExclusionsByAtom;
284 int32 **modExclusionsByAtom;
286 int32 **gromacsPairByAtom;
293 int32 **tholesByAtom;
294 int32 **anisosByAtom;
295 int32 **oneFourNbTholesByAtom;
302 Index *eachAtomCharge;
316 AtomSetList *fixedAtomsSet;
317 AtomSetList *constrainedAtomsSet;
332 int32 *lphostIndexes;
337 ConstraintParams *consParams;
340 int32 **gridfrcIndexes;
341 GridforceParams **gridfrcParams;
347 StirParams *stirParams;
349 int32 *movDragIndexes;
350 MovDragParams *movDragParams;
352 int32 *rotDragIndexes;
353 RotDragParams *rotDragParams;
356 Real *langevinParams;
357 int32 *fixedAtomFlags;
358 int32 *exPressureAtomFlags;
366 Real *rigidBondLengths;
369 unsigned char *fepAtomFlags;
373 unsigned char *ssAtomFlags;
393 #ifndef MEM_OPT_VERSION 401 void read_bonds(FILE *);
413 void read_donors(FILE *);
415 void read_acceptors(FILE *);
417 void read_exclusions(FILE *);
420 void read_exclusions(
int*,
int*,
int);
427 void read_lphosts(FILE *);
429 void read_anisos(FILE *);
439 void assignLCPOTypes(
int inputType);
442 void plgLoadAtomBasics(molfile_atom_t *atomarray);
443 void plgLoadBonds(
int *from,
int *to);
444 void plgLoadAngles(
int *plgAngles);
445 void plgLoadDihedrals(
int *plgDihedrals);
446 void plgLoadImpropers(
int *plgImpropers);
447 void plgLoadCrossterms(
int *plgCterms);
453 void build_lists_by_atom();
456 void build12excl(
void);
457 void build13excl(
void);
458 void build14excl(
int);
461 void build_inherited_excl(
int);
463 void stripFepExcl(
void);
465 void build_exclusions();
468 void build_atom_status(
void);
475 void build_excl_check_signatures();
509 return lcpoParamType;
513 return drudeConsts[i].
alpha;
516 #ifdef MEM_OPT_VERSION 530 return s_NumFixedAtoms;
537 return s_NumFixedGroups;
545 if (s_NumFixedGroups) s_NumGroupDegFreedom -= 3 * s_NumFixedGroups;
548 s_NumGroupDegFreedom -= 3;
550 return s_NumGroupDegFreedom;
555 int64_t s_NumDegFreedom = 3 * (int64_t)
numAtoms;
557 if (s_NumFixedAtoms) s_NumDegFreedom -= 3 * s_NumFixedAtoms;
561 s_NumDegFreedom -= 3;
563 if ( ! isInitialReport &&
simParams->pairInteractionOn) {
570 int s_NumFixedRigidBonds =
583 return s_NumDegFreedom;
735 int qmDroppedBonds, qmDroppedAngles, qmDroppedDihedrals;
736 int qmDroppedImpropers, qmDroppedCrossterms;
743 char **qmElementArray;
745 char **qmDummyElement;
778 int **qmMMBondedIndx ;
781 int **qmMMChargeTarget;
813 int qmLSSResidueSize;
825 int qmLSSTotalNumAtms;
828 std::map<int,int> qmClassicSolv ;
833 void read_qm_csdm_file(std::map<Real,int> &qmGrpIDMap) ;
991 #ifdef MEM_OPT_VERSION 993 void load_constrained_atoms(
StringList *constrainedFile);
1089 #ifdef MEM_OPT_VERSION 1092 int get_cluster_size_con(
int aid)
const {
return clusterSigs[aid]; }
1095 int get_cluster_size_uncon(
int cIdx)
const {
return clusterSize[cIdx]; }
1096 int get_cluster_idx(
int aid)
const {
return clusterSigs[aid]; }
1097 int get_num_clusters()
const {
return numClusters; }
1103 #ifndef MEM_OPT_VERSION 1116 #ifdef MEM_OPT_VERSION 1117 return atomMassPool[eachAtomMass[anum]];
1119 return(atoms[anum].mass);
1126 #ifdef MEM_OPT_VERSION 1127 return atomChargePool[eachAtomCharge[anum]];
1129 return(atoms[anum].charge);
1136 return(atoms[anum].vdw_type);
1139 #ifndef MEM_OPT_VERSION 1160 int index = lphostIndexes[atomid];
1161 return (index != -1 ? &(lphosts[index]) : NULL);
1165 #ifndef MEM_OPT_VERSION 1187 #ifndef MEM_OPT_VERSION 1194 if (atomNames == NULL)
1196 NAMD_die(
"Tried to find atom type on node other than node 0");
1199 #ifdef MEM_OPT_VERSION 1202 return(atomNames[anum].atomtype);
1219 #ifndef MEM_OPT_VERSION 1221 {
return bondsByAtom[anum]; }
1223 {
return anglesByAtom[anum]; }
1225 {
return dihedralsByAtom[anum]; }
1227 {
return impropersByAtom[anum]; }
1229 {
return crosstermsByAtom[anum]; }
1231 {
return exclusionsByAtom[anum]; }
1233 {
return fullExclusionsByAtom[anum]; }
1235 {
return modExclusionsByAtom[anum]; }
1240 #ifdef MEM_OPT_VERSION 1241 int checkExclByIdx(
int idx1,
int atom1,
int atom2)
const;
1243 return &exclChkSigPool[idx];
1246 int checkexcl(
int atom1,
int atom2)
const;
1249 return &all_exclusions[anum];
1260 return(gridfrcIndexes[gridnum][atomnum] != -1);
1269 #ifndef MEM_OPT_VERSION 1277 return(consIndexes[atomnum] != -1);
1294 return(movDragIndexes[atomnum] != -1);
1310 return(rotDragIndexes[atomnum] != -1);
1342 return(atoms[atomnum].flags.dcdSelection & tag);
1352 #ifndef MEM_OPT_VERSION 1356 k = consParams[consIndexes[atomnum]].k;
1357 refPos = consParams[consIndexes[atomnum]].refPos;
1364 k = gridfrcParams[gridnum][gridfrcIndexes[gridnum][atomnum]].k;
1365 q = gridfrcParams[gridnum][gridfrcIndexes[gridnum][atomnum]].q;
1372 result = gridfrcGrid[gridnum];
1380 gridfrcGrid[gridnum] = grid;
1390 return(langevinParams ? langevinParams[atomnum] : 0.);
1396 refPos = stirParams[stirIndexes[atomnum]].refPos;
1402 stirParams[stirIndexes[atomnum]].startTheta = theta;
1408 return stirParams[stirIndexes[atomnum]].startTheta;
1415 v = movDragParams[movDragIndexes[atomnum]].v;
1422 v = rotDragParams[rotDragIndexes[atomnum]].v;
1423 a = rotDragParams[rotDragIndexes[atomnum]].a;
1424 p = rotDragParams[rotDragIndexes[atomnum]].p;
1439 return(fepAtomFlags[anum]);
1444 return fepAtomFlags;
1450 return(ssAtomFlags[anum]);
1485 for (
int i=0; i <
order; ++i ) {
1486 typeSum += (fepAtomFlags[atomID[i]] == 2 ? -1 : fepAtomFlags[atomID[i]]);
1493 if ( typeSum == 0 || abs(typeSum) ==
order )
return 0;
1494 else if ( 0 < typeSum && typeSum <
order )
return 1;
1495 else if ( -
order < typeSum && typeSum < 0 )
return 2;
1498 NAMD_die(
"Unexpected alchemical bonded interaction!");
1503 #ifndef MEM_OPT_VERSION 1516 Bool is_atom_in_set(AtomSetList *localAtomsSet,
int aid,
int *listIdx)
const;
1518 return is_atom_in_set(fixedAtomsSet,aid,listIdx);
1521 return is_atom_in_set(constrainedAtomsSet,aid,listIdx);
1530 return(stirIndexes[atomnum] != -1);
1552 return(rigidBondLengths[atomnum]);
1564 #ifdef MEM_OPT_VERSION 1568 void read_binary_atom_info(
int fromAtomID,
int toAtomID,
InputAtomList &inAtoms);
1573 Index getEachAtomMass(
int i){
return eachAtomMass[i];}
1574 Index getEachAtomCharge(
int i){
return eachAtomCharge[i];}
1576 ExclSigID getAtomExclSigId(
int aid)
const {
1577 return eachAtomExclSig[aid];
1580 Real *getAtomMassPool(){
return atomMassPool;}
1581 Real *getAtomChargePool(){
return atomChargePool;}
1584 int atomSigPoolSize;
1589 int segNamePoolSize;
1592 int resNamePoolSize;
1595 int atomNamePoolSize;
1598 int atomTypePoolSize;
1602 Real *atomChargePool;
1608 return eachAtomSig[aid];
1612 int exclSigPoolSize;
1618 void addNewExclSigPool(
const std::vector<ExclusionSignature>&);
1620 void delEachAtomSigs();
1622 void delChargeSpace();
1624 void delMassSpace();
1626 void delClusterSigs();
1628 void delAtomNames();
1630 void delFixedAtoms();
Real atomcharge(int anum) const
int32 * get_exclusions_for_atom(int anum)
void build_gridforce_params(StringList *, StringList *, StringList *, StringList *, PDB *, char *)
BigReal tail_corr_virial_2
DCDParams dcdSelectionParams[16]
int num_alch_unpert_Dihedrals
int get_go_exp_a(int chain1, int chain2)
void get_rotdrag_params(BigReal &v, Vector &a, Vector &p, int atomnum) const
int get_mother_atom(int) const
Bool is_atom_movdragged(int atomnum) const
Real get_go_cutoff(int chain1, int chain2)
int32 * get_dihedrals_for_atom(int anum)
GridforceGrid * get_gridfrc_grid(int gridnum) const
const int * get_qmMMNumTargs()
void add_dcd_selection_file(int dcdIndex, char *userDcdFile)
int32 * get_crossterms_for_atom(int anum)
Bool is_atom_exPressure(int atomnum) const
void print_bonds(Parameters *)
int get_atom_index_from_dcd_selection(const int index, const int atomIndex)
void send_GoMolecule(MOStream *)
Crossterm * get_crossterm(int inum) const
Exclusion * get_exclusion(int ex) const
int checkexcl(int atom1, int atom2) const
void get_constorque_params(BigReal &v, Vector &a, Vector &p, int atomnum) const
const int * get_qmGrpNumBonds()
void build_extra_bonds(Parameters *parameters, StringList *file)
void setOccupancyData(molfile_atom_t *atomarray)
const int * get_qmAtmIndx()
BigReal tail_corr_virial_1
int get_residue_size(const char *segid, int resid) const
void receive_GoMolecule(MIStream *)
void read_alch_unpert_dihedrals(FILE *)
int numAnisos
Number of anisotropic terms.
Bool is_hydrogenGroupParent(int)
Angle * alch_unpert_angles
int lookup(const char *segid, int resid, int *begin, int *end) const
Crossterm * getAllCrossterms() const
void send_Molecule(MOStream *)
Real get_go_epsilonRep(int chain1, int chain2)
int num_alch_unpert_Bonds
int32 * moleculeAtom
atom index for all molecules
const int *const * get_qmMMBondedIndx()
Dihedral * getAllDihedrals() const
void setBFactorData(molfile_atom_t *atomarray)
int get_clusterSize(int anum) const
int num_alch_unpert_Angles
unsigned char get_ss_type(int anum) const
const int32 * get_full_exclusions_for_atom(int anum) const
BigReal GetAtomAlpha(int i) const
void reloadCharges(float charge[], int n)
int const * get_cSMDindxLen()
Improper * getAllImpropers() const
struct seg_resid AtomSegResInfo
const int32 * get_mod_exclusions_for_atom(int anum) const
Dihedral * get_dihedral(int dnum) const
std::map< int, int > & get_qmMMSolv()
Dihedral * alch_unpert_dihedrals
const char *const * get_qmDummyElement()
const ExclusionCheck * get_excl_check_for_atom(int anum) const
void read_go_file(char *)
BigReal get_go_force(BigReal, int, int, BigReal *, BigReal *) const
Molecule stores the structural information for the system.
void build_go_arrays(StringList *, char *)
Lphost * getAllLphosts() const
Bool is_atom_stirred(int atomnum) const
Bond * getAllBonds() const
BigReal get_go_force2(BigReal, BigReal, BigReal, int, int, BigReal *, BigReal *) const
int32 * get_angles_for_atom(int anum)
const int *const * get_qmGrpBonds()
Real get_go_epsilon(int chain1, int chain2)
int const *const * get_cSMDpairs()
const char * get_atomtype(int anum) const
uint16_t find_or_create_dcd_selection_index(const char *keystr)
const int get_dcd_selection_size(const int index)
int32 * consTorqueIndexes
HydrogenGroup hydrogenGroup
void build_langevin_params(BigReal coupling, BigReal drudeCoupling, Bool doHydrogen)
Angle * get_angle(int anum) const
int const * getLcpoParamType()
Angle * getAllAngles() const
BigReal getEnergyTailCorr(const BigReal, const int)
int numLonepairs
Number of lone pairs.
int get_atom_from_name(const char *segid, int resid, const char *aname) const
Real get_go_sigmaRep(int chain1, int chain2)
int64 numCalcFullExclusions
Bond * getAllDonors() const
BigReal get_gro_force(BigReal, BigReal, BigReal, int, int) const
const float * getBFactorData()
int numLargeMolecules
Number of large molecules (compare to LARGEMOLTH)
int32 * get_impropers_for_atom(int anum)
void compute_LJcorrection_alternative()
int get_go_exp_rep(int chain1, int chain2)
Real langevin_param(int atomnum) const
Index atomvdwtype(int anum) const
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]
Bond * get_acceptor(int dnum) const
void read_alch_unpert_bonds(FILE *)
AtomSegResInfo * getAtomSegResInfo() const
int numMolecules
Number of 1-4 atom pairs with NBThole defined.
int get_dcd_selection_index_from_atom_id(const int index, const int atomIndex)
int numTholes
Number of Thole terms.
int32 * get_bonds_for_atom(int anum)
const int *const * get_qmMMBond()
std::map< std::string, int > dcdSelectionKeyMap
void get_cons_params(Real &k, Vector &refPos, int atomnum) const
void set_qm_replaceAll(Bool newReplaceAll)
void prepare_qm(const char *pdbFileName, Parameters *params, ConfigList *cfgList)
Bool go_restricted(int, int, int)
const Real * get_qmAtomGroup() const
int num_fixed_atoms() const
void build_stirred_atoms(StringList *, StringList *, PDB *, char *)
const float * getOccupancyData()
const Real * get_cSMDcoffs()
Bool is_atom_rotdragged(int atomnum) const
void get_gridfrc_params(Real &k, Charge &q, int atomnum, int gridnum) const
int get_fep_bonded_type(const int *atomID, unsigned int order) const
void NAMD_die(const char *err_msg)
void get_stir_refPos(Vector &refPos, int atomnum) const
HashPool< HashString > atomNamePool
BigReal getVirialTailCorr(const BigReal)
Real atommass(int anum) const
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
int maxMigrationGroupSize
const unsigned char * getFepAtomFlags() const
const int *const * get_qmMMChargeTarget()
Bool is_group_fixed(int atomnum) const
int * get_qmCustPCSizes()
void build_fep_flags(StringList *, StringList *, PDB *, char *, const char *)
const char *const * get_qmElements()
unsigned char get_fep_type(int anum) const
ResidueLookupElem * append(const char *segid, int resid, int aid)
int numCalcOneFourNbTholes
void put_stir_startTheta(Real theta, int atomnum) const
void build_alch_unpert_bond_lists(char *)
int num_fixed_groups() const
void build_fixed_atoms(StringList *, StringList *, PDB *, char *)
Bool is_atom_constorqued(int atomnum) const
const Real * get_cSMDKs()
void compute_LJcorrection()
void updateAtomDcdSelection(int atomIdx, uint16 bits)
int get_go_exp_b(int chain1, int chain2)
std::vector< int32 > dcdSelectionIndex
void print_atoms(Parameters *)
Bond * getAllAcceptors() const
int go_indices[MAX_GO_CHAINS+1]
void build_go_sigmas(StringList *, char *)
AtomNameInfo * getAtomNames() const
HashPool< HashString > segNamePool
void delete_alch_bonded(void)
HashPool< HashString > atomTypePool
int64_t num_deg_freedom(int isInitialReport=0) const
void build_exPressure_atoms(StringList *, StringList *, PDB *, char *)
int numZeroMassAtoms
Number of atoms with zero mass.
void build_dcd_selection_list_pdb(int dcdIndex, char *userDcdInputFile)
BigReal get_gro_force2(BigReal, BigReal, BigReal, int, int, BigReal *, BigReal *) const
void build_constant_forces(char *)
int32 * moleculeStartIndex
starting index of each molecule
int * get_qmCustomPCIdxs()
int get_atom_from_index_in_residue(const char *segid, int resid, int index) const
int set_gridfrc_grid(int gridnum, GridforceGrid *grid)
Bool is_atom_gridforced(int atomnum, int gridnum) const
int get_cluster(int anum) const
const Real * get_cSMDVels()
uint16_t find_dcd_selection_index(const char *keystr)
Lphost * get_lphost(int atomid) const
int64_t num_group_deg_freedom() const
int get_qmNumGrps() const
int numDrudeAtoms
Number of Drude particles.
Bond * get_bond(int bnum) const
int restrictions[MAX_RESTRICTIONS]
Bool atoms_1to4(unsigned int, unsigned int)
Bool is_atom_fixed(int atomnum) const
void get_movdrag_params(Vector &v, int atomnum) const
void receive_Molecule(MIStream *)
void build_movdrag_params(StringList *, StringList *, StringList *, PDB *, char *)
Real get_qmAtomGroup(int indx) const
Bool is_atom_constrained(int atomnum) const
int numLphosts
Number of lone pair host records in PSF.
void add_dcd_selection_freq(int dcdIndex, int freq)
Real rigid_bond_length(int atomnum) const
Bond * get_donor(int dnum) const
int const *const * get_cSMDindex()
Mass * get_qmLSSRefMass()
Bool is_atom_dcd_selection(int atomnum, int tag) const
const BigReal * get_qmDummyBondVal()
BigReal get_go_force_new(BigReal, int, int, BigReal *, BigReal *) const
Real get_stir_startTheta(int atomnum) const
std::vector< int32 > dcdSelectionIndexReverse
ResizeArray< int > atomIndex
Molecule(SimParameters *, Parameters *param)
void parse_dcd_selection_params(ConfigList *configList)
const int * get_qmGrpSizes()
HashPool< AtomSigInfo > atomSigPool
Improper * get_improper(int inum) const
void build_go_params(StringList *)
void build_go_sigmas2(StringList *, char *)
void read_alch_unpert_angles(FILE *)
uint16 get_atom_dcd_status(const int index)