NAMD
GlobalMasterEasy.C
Go to the documentation of this file.
1 
7 /*
8  Forwards atoms to master node for force evaluation.
9 */
10 
11 #include "InfoStream.h"
12 #include "Node.h"
13 #include "PatchMap.h"
14 #include "PatchMap.inl"
15 #include "AtomMap.h"
16 
17 #include "GlobalMaster.h"
18 #include "GlobalMasterEasy.h"
19 
20 #include "PatchMgr.h"
21 #include "Molecule.h"
22 #include "ReductionMgr.h"
23 #include "ComputeMgr.h"
24 #include "ComputeMgr.decl.h"
25 #include "ConfigList.h"
26 #include <stdio.h>
27 
28 //#define DEBUGM
29 #define MIN_DEBUG_LEVEL 1
30 #include "Debug.h"
31 
32 
33 GlobalMasterEasy::GlobalMasterEasy(const char *the_config_name) {
34  DebugM(1,"Here\n");
35 
36  molecule = Node::Object()->molecule;
37  int len = strlen(the_config_name);
38  configName = new char[len+1];
39  strcpy(configName,the_config_name);
40 
41  initialize();
42 }
43 
45  delete [] configName;
46 }
47 
49  getAtomID(const char *segid, int resid, const char *aname)
50 {
51  return molecule->get_atom_from_name(segid,resid,aname);
52 }
53 
55  getNumAtoms(const char* segid, int resid) // 0 on error
56 {
57  return molecule->get_residue_size(segid,resid);
58 }
59 
61  getAtomID(const char *segid, int resid, int index)
62 {
63  return molecule->get_atom_from_index_in_residue(segid,resid,index);
64 }
65 
66 double GlobalMasterEasy::getMass(int atomid)
67 {
68  if ( atomid < 0 || atomid >= molecule->numAtoms ) return -1.; // failure
69  return molecule->atommass(atomid);
70 }
71 
72 
74 {
75  if ( atomid < 0 || atomid >= molecule->numAtoms ) return -1; // failure
76  modifyRequestedAtoms().add(atomid);
77  return 0; // success
78 }
79 
80 int GlobalMasterEasy::getPosition(int atomid, Position &position)
81 {
85  for ( ; a_i != a_e; ++a_i, ++p_i ) {
86  if ( *a_i == atomid ) {
87  position = *p_i;
88  return 0; // success
89  }
90  }
91  return -1; // failure
92 }
93 
94 int GlobalMasterEasy::addForce(int atomid, Force force)
95 {
96  if ( atomid < 0 || atomid >= molecule->numAtoms ) return -1; // failure
97  modifyForcedAtoms().add(atomid);
98  modifyAppliedForces().add(force);
99  return 0; // success
100 }
101 
103  energy += e;
104 }
105 
106 void GlobalMasterEasy::initialize() {
107  DebugM(1,"Here\n");
108  DebugM(4,"Initializing master\n");
109 
110  // Get the script for subclasses
111  StringList *script = Node::Object()->configList->find(configName);
112 
113  config = new char[1];
114  config[0] = '\0';
115 
116  for ( ; script; script = script->next) {
117  if ( strstr(script->data,"\n") ) {
118  size_t add_len = strlen(script->data);
119  size_t config_len = 0;
120  config_len = strlen(config);
121  char *new_config = new char[config_len + add_len + 2];
122  strcpy(new_config,config);
123  strcat(new_config,script->data);
124  strcat(new_config,"\n"); // just to be safe
125  delete [] config;
126  config = new_config;
127  } else {
128  FILE *infile = fopen(script->data,"r");
129  if ( ! infile ) {
130  char errmsg[256];
131  sprintf(errmsg,"Error trying to read file %s!\n",script->data);
132  NAMD_die(errmsg);
133  }
134  fseek(infile,0,SEEK_END);
135  size_t add_len = ftell(infile);
136  size_t config_len = 0;
137  config_len = strlen(config);
138  char *new_config = new char[config_len + add_len + 3];
139  strcpy(new_config,config);
140  delete [] config;
141  config = new_config;
142  new_config += config_len;
143  rewind(infile);
144  fread(new_config,sizeof(char),add_len,infile);
145  new_config += add_len;
146  new_config[0] = '\n';
147  new_config[1] = '\0';
148  fclose(infile);
149  }
150  }
151 
152 }
153 
154 void GlobalMasterEasy::calculate() {
155  DebugM(1,"Here\n");
156 
157  /* zero out the forces */
160 
161  /* XXX is this necessary? */
163  modifyGroupForces().setall(Vector(0,0,0));
164  energy = 0.0;
165 
166  // Build results here
167  easy_calc();
168 
170 }
171 
172 void GlobalMasterEasy::easy_init(const char *) {
173  CkPrintf("Default GlobalMasterEasy::easy_init() called.\n");
174 }
175 
177  CkPrintf("Default GlobalMasterEasy::easy_calc() called.\n");
178 }
static Node * Object()
Definition: Node.h:86
virtual ~GlobalMasterEasy()
ForceList & modifyAppliedForces()
Definition: GlobalMaster.C:202
AtomIDList & modifyRequestedAtoms()
Definition: GlobalMaster.C:167
int getPosition(int atomid, Position &position)
double getMass(int atomid)
int get_residue_size(const char *segid, int resid) const
Definition: Molecule.C:149
AtomIDList::const_iterator getAtomIdBegin()
Definition: GlobalMaster.C:230
Definition: Vector.h:72
int getAtomID(const char *segid, int resid, const char *aname)
int addForce(int atomid, Force force)
#define DebugM(x, y)
Definition: Debug.h:75
int add(const Elem &elem)
Definition: ResizeArray.h:101
PositionList::const_iterator getAtomPositionBegin()
Definition: GlobalMaster.C:238
BigRealList::const_iterator getGroupMassEnd()
Definition: GlobalMaster.C:279
void resize(int i)
Definition: ResizeArray.h:84
void setall(const Elem &elem)
Definition: ResizeArray.h:94
GlobalMasterEasy(const char *the_config_name)
int getNumAtoms(const char *segid, int resid)
int get_atom_from_name(const char *segid, int resid, const char *aname) const
Definition: Molecule.C:126
const AtomID * const_iterator
Definition: ResizeArray.h:38
int requestAtom(int atomid)
void addEnergy(BigReal)
AtomIDList & modifyForcedAtoms()
Definition: GlobalMaster.C:197
int numAtoms
Definition: Molecule.h:586
void NAMD_die(const char *err_msg)
Definition: common.C:147
BigRealList::const_iterator getGroupMassBegin()
Definition: GlobalMaster.C:274
ForceList & modifyGroupForces()
Definition: GlobalMaster.C:207
Real atommass(int anum) const
Definition: Molecule.h:1114
ConfigList * configList
Definition: Node.h:182
virtual void easy_init(const char *)
StringList * next
Definition: ConfigList.h:49
AtomIDList::const_iterator getAtomIdEnd()
Definition: GlobalMaster.C:234
char * data
Definition: ConfigList.h:48
int get_atom_from_index_in_residue(const char *segid, int resid, int index) const
Definition: Molecule.C:163
void addReductionEnergy(int reductionTag, BigReal energy)
Definition: GlobalMaster.C:142
virtual void easy_calc(void)
StringList * find(const char *name) const
Definition: ConfigList.C:341
Molecule * molecule
Definition: Node.h:179
double BigReal
Definition: common.h:123