35 #define MIN_DEBUG_LEVEL 1
39 void GlobalMasterFreeEnergy::update() {
45 double LambdaKf, LambdaRef;
46 double Sum_dU_dLambdas;
48 if (m_LambdaManager.
GetLambdas(LambdaKf, LambdaRef)) {
51 m_RestraintManager.
SetLambdas(LambdaKf, LambdaRef);
90 void GlobalMasterFreeEnergy::user_initialize() {
95 iout <<
iINFO <<
" FREE ENERGY PERTURBATION CONFIG\n";
96 iout << iINFO <<
"***********************************\n";
97 int config_len = strlen(config);
98 if ( config_len < 10000 ) {
101 char *new_config =
new char[10000 + 10];
102 strncpy(new_config,config,10000);
103 new_config[10000] = 0;
104 strcat(new_config,
"\n...\n");
106 delete [] new_config;
108 iout << iINFO <<
"***********************************\n" <<
endi;
110 ReadInput(config, m_RestraintManager, m_LambdaManager, *
this, simParams->
dt);
114 if (Total > simParams->
N) {
115 iout <<
"FreeEnergy: Not enough steps to complete pfm & mcti blocks" << std::endl;
116 iout <<
"FreeEnergy: Num Steps Needed = " << Total << std::endl;
117 iout <<
"FreeEnergy: Num Steps Requested = " << simParams->
N << std::endl <<
endi;
118 NAMD_die(
"FreeEnergy: Fatal Run-Time Error");
123 void GlobalMasterFreeEnergy::user_calculate() {
133 getAtomID(
const char *segid,
int resid,
const char *aname)
152 if ( atomid < 0 || atomid >= molecule->
numAtoms )
return -1.;
159 if ( atomid < 0 || atomid >= molecule->
numAtoms )
return -1;
169 for ( ; a_i != a_e; ++a_i, ++p_i ) {
170 if ( *a_i == atomid ) {
180 DebugM(2,
"Forcing "<<atomid<<
" with "<<force<<
"\n");
181 if ( atomid < 0 || atomid >= molecule->
numAtoms )
return -1;
190 DebugM(3,
"Constructing GlobalMasterFreeEnergy\n");
199 DebugM(3,
"Destructing GlobalMasterFreeEnergy\n");
204 void GlobalMasterFreeEnergy::initialize() {
205 DebugM(4,
"Initializing master\n");
210 config =
new char[1];
213 for ( ; script; script = script->
next) {
214 if ( strstr(script->
data,
"\n") ) {
215 size_t add_len = strlen(script->
data);
216 size_t config_len = 0;
217 config_len = strlen(config);
218 char *new_config =
new char[config_len + add_len + 2];
219 strcpy(new_config,config);
220 strcat(new_config,script->
data);
221 strcat(new_config,
"\n");
225 FILE *infile = fopen(script->
data,
"r");
228 sprintf(errmsg,
"Error trying to read file %s!\n",script->
data);
231 fseek(infile,0,SEEK_END);
232 size_t add_len = ftell(infile);
233 size_t config_len = 0;
234 config_len = strlen(config);
235 char *new_config =
new char[config_len + add_len + 3];
236 strcpy(new_config,config);
239 new_config += config_len;
241 fread(new_config,
sizeof(
char),add_len,infile);
242 new_config += add_len;
243 new_config[0] =
'\n';
244 new_config[1] =
'\0';
254 void GlobalMasterFreeEnergy::calculate() {
255 DebugM(4,
"Calculating forces on master\n");
271 DebugM(4,
"Sending new configuration (" <<
Bool_t IsTimeToPrint_dU_dLambda()
int get_atom_from_name(const char *segid, int resid, const char *aname) const
int get_residue_size(const char *segid, int resid) const
int getPosition(int atomid, Position &position)
ForceList & modifyAppliedForces()
std::ostream & iINFO(std::ostream &s)
AtomIDList & modifyRequestedAtoms()
Bool_t IsTimeToClearAccumulator()
void SetLambdas(double LambdaKf, double LambdaRef)
int getAtomID(const char *segid, int resid, const char *aname)
const Elem * const_iterator
int requestAtom(int atomid)
void PrintLambdaHeader(double dT)
void Accumulate(double dU_dLambda)
void Print_MCTI_Integration()
AtomIDList::const_iterator getAtomIdBegin()
SimParameters * simParameters
std::ostream & endi(std::ostream &s)
~GlobalMasterFreeEnergy()
int get_atom_from_index_in_residue(const char *segid, int resid, int index) const
void PrintHeader(double dT)
PositionList::const_iterator getAtomPositionBegin()
int addForce(int atomid, Force force)
BigRealList::const_iterator getGroupMassEnd()
void Print_dU_dLambda_Info()
void Print_dU_dLambda_Summary(double Sum_dU_dLambdas)
void ReadInput(char *Str, ARestraintManager &RMgr, ALambdaManager &LMgr, GlobalMasterFreeEnergy &CFE, double dT)
void setall(const Elem &elem)
AtomIDList & modifyForcedAtoms()
void NAMD_die(const char *err_msg)
Bool_t GetLambdas(double &LambdaKf, double &LambdaRef)
BigRealList::const_iterator getGroupMassBegin()
ForceList & modifyGroupForces()
void UpdateCOMs(GlobalMasterFreeEnergy &CFE)
int add(const Elem &elem)
AtomIDList::const_iterator getAtomIdEnd()
StringList * find(const char *name) const
Bool_t IsEndOf_MCTI_Step()
void AddForces(GlobalMasterFreeEnergy &CFE)
Real atommass(int anum) const
Bool_t ThereIsAForcingRestraint()
const AtomIDList & forcedAtoms()
void PrintRestraintInfo()
int getNumAtoms(const char *segid, int resid)
double getMass(int atomid)
const AtomIDList & requestedAtoms()