31 #include "molfile_plugin.h" 34 #define MAX_GO_CHAINS 10 35 #define MAX_RESTRICTIONS 10 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 143 #define LARGEMOLTH 64 // threshhold to determin large molecule 178 typedef struct constraint_params
187 typedef struct gridfrc_params
195 typedef struct stir_params
201 typedef struct movdrag_params
207 typedef struct rotdrag_params
214 typedef struct constorque_params
221 #ifdef MEM_OPT_VERSION 228 return aid1 < a.aid1;
233 void load_atom_set(
StringList *setfile,
const char *setname,
234 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;
289 bool dcdSelectionAtoms;
295 int32 **tholesByAtom;
296 int32 **anisosByAtom;
303 Index *eachAtomCharge;
317 AtomSetList *fixedAtomsSet;
318 AtomSetList *constrainedAtomsSet;
333 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();
508 return lcpoParamType;
512 return drudeConsts[i].
alpha;
515 #ifdef MEM_OPT_VERSION 529 return s_NumFixedAtoms;
536 return s_NumFixedGroups;
544 if (s_NumFixedGroups) s_NumGroupDegFreedom -= 3 * s_NumFixedGroups;
547 s_NumGroupDegFreedom -= 3;
549 return s_NumGroupDegFreedom;
554 int64_t s_NumDegFreedom = 3 * (int64_t)
numAtoms;
556 if (s_NumFixedAtoms) s_NumDegFreedom -= 3 * s_NumFixedAtoms;
560 s_NumDegFreedom -= 3;
562 if ( ! isInitialReport &&
simParams->pairInteractionOn) {
569 int s_NumFixedRigidBonds =
582 return s_NumDegFreedom;
729 int qmDroppedBonds, qmDroppedAngles, qmDroppedDihedrals;
730 int qmDroppedImpropers, qmDroppedCrossterms;
737 char **qmElementArray;
739 char **qmDummyElement;
772 int **qmMMBondedIndx ;
775 int **qmMMChargeTarget;
807 int qmLSSResidueSize;
819 int qmLSSTotalNumAtms;
822 std::map<int,int> qmClassicSolv ;
827 void read_qm_csdm_file(std::map<Real,int> &qmGrpIDMap) ;
984 #ifdef MEM_OPT_VERSION 986 void load_constrained_atoms(
StringList *constrainedFile);
1082 #ifdef MEM_OPT_VERSION 1085 int get_cluster_size_con(
int aid)
const {
return clusterSigs[aid]; }
1088 int get_cluster_size_uncon(
int cIdx)
const {
return clusterSize[cIdx]; }
1089 int get_cluster_idx(
int aid)
const {
return clusterSigs[aid]; }
1090 int get_num_clusters()
const {
return numClusters; }
1096 #ifndef MEM_OPT_VERSION 1109 #ifdef MEM_OPT_VERSION 1110 return atomMassPool[eachAtomMass[anum]];
1112 return(atoms[anum].mass);
1119 #ifdef MEM_OPT_VERSION 1120 return atomChargePool[eachAtomCharge[anum]];
1122 return(atoms[anum].charge);
1129 return(atoms[anum].vdw_type);
1132 #ifndef MEM_OPT_VERSION 1153 int index = lphostIndexes[atomid];
1154 return (index != -1 ? &(lphosts[index]) : NULL);
1158 #ifndef MEM_OPT_VERSION 1180 #ifndef MEM_OPT_VERSION 1187 if (atomNames == NULL)
1189 NAMD_die(
"Tried to find atom type on node other than node 0");
1192 #ifdef MEM_OPT_VERSION 1195 return(atomNames[anum].atomtype);
1212 #ifndef MEM_OPT_VERSION 1214 {
return bondsByAtom[anum]; }
1216 {
return anglesByAtom[anum]; }
1218 {
return dihedralsByAtom[anum]; }
1220 {
return impropersByAtom[anum]; }
1222 {
return crosstermsByAtom[anum]; }
1224 {
return exclusionsByAtom[anum]; }
1226 {
return fullExclusionsByAtom[anum]; }
1228 {
return modExclusionsByAtom[anum]; }
1233 #ifdef MEM_OPT_VERSION 1234 int checkExclByIdx(
int idx1,
int atom1,
int atom2)
const;
1236 return &exclChkSigPool[idx];
1239 int checkexcl(
int atom1,
int atom2)
const;
1242 return &all_exclusions[anum];
1253 return(gridfrcIndexes[gridnum][atomnum] != -1);
1262 #ifndef MEM_OPT_VERSION 1270 return(consIndexes[atomnum] != -1);
1287 return(movDragIndexes[atomnum] != -1);
1303 return(rotDragIndexes[atomnum] != -1);
1328 #ifndef MEM_OPT_VERSION 1333 if (dcdSelectionAtoms)
1336 return(atoms[atomnum].flags.dcdSelection & tag);
1347 #ifndef MEM_OPT_VERSION 1351 k = consParams[consIndexes[atomnum]].k;
1352 refPos = consParams[consIndexes[atomnum]].refPos;
1359 k = gridfrcParams[gridnum][gridfrcIndexes[gridnum][atomnum]].k;
1360 q = gridfrcParams[gridnum][gridfrcIndexes[gridnum][atomnum]].q;
1367 result = gridfrcGrid[gridnum];
1375 gridfrcGrid[gridnum] = grid;
1385 return(langevinParams ? langevinParams[atomnum] : 0.);
1391 refPos = stirParams[stirIndexes[atomnum]].refPos;
1397 stirParams[stirIndexes[atomnum]].startTheta = theta;
1403 return stirParams[stirIndexes[atomnum]].startTheta;
1410 v = movDragParams[movDragIndexes[atomnum]].v;
1417 v = rotDragParams[rotDragIndexes[atomnum]].v;
1418 a = rotDragParams[rotDragIndexes[atomnum]].a;
1419 p = rotDragParams[rotDragIndexes[atomnum]].p;
1434 return(fepAtomFlags[anum]);
1439 return fepAtomFlags;
1445 return(ssAtomFlags[anum]);
1480 for (
int i=0; i <
order; ++i ) {
1481 typeSum += (fepAtomFlags[atomID[i]] == 2 ? -1 : fepAtomFlags[atomID[i]]);
1488 if ( typeSum == 0 || abs(typeSum) ==
order )
return 0;
1489 else if ( 0 < typeSum && typeSum <
order )
return 1;
1490 else if ( -
order < typeSum && typeSum < 0 )
return 2;
1493 NAMD_die(
"Unexpected alchemical bonded interaction!");
1498 #ifndef MEM_OPT_VERSION 1511 Bool is_atom_in_set(AtomSetList *localAtomsSet,
int aid,
int *listIdx)
const;
1513 return is_atom_in_set(fixedAtomsSet,aid,listIdx);
1516 return is_atom_in_set(constrainedAtomsSet,aid,listIdx);
1525 return(stirIndexes[atomnum] != -1);
1547 return(rigidBondLengths[atomnum]);
1559 #ifdef MEM_OPT_VERSION 1563 void read_binary_atom_info(
int fromAtomID,
int toAtomID,
InputAtomList &inAtoms);
1568 Index getEachAtomMass(
int i){
return eachAtomMass[i];}
1569 Index getEachAtomCharge(
int i){
return eachAtomCharge[i];}
1571 ExclSigID getAtomExclSigId(
int aid)
const {
1572 return eachAtomExclSig[aid];
1575 Real *getAtomMassPool(){
return atomMassPool;}
1576 Real *getAtomChargePool(){
return atomChargePool;}
1579 int atomSigPoolSize;
1584 int segNamePoolSize;
1587 int resNamePoolSize;
1590 int atomNamePoolSize;
1593 int atomTypePoolSize;
1597 Real *atomChargePool;
1603 return eachAtomSig[aid];
1607 int exclSigPoolSize;
1613 void addNewExclSigPool(
const std::vector<ExclusionSignature>&);
1615 void delEachAtomSigs();
1617 void delChargeSpace();
1619 void delMassSpace();
1621 void delClusterSigs();
1623 void delAtomNames();
1625 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
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 molecules.
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)
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()
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 *)