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)