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 
42 
43  initialize();
44 }
45 
47  delete [] configName;
48  delete reduction;
49 }
50 
52  getAtomID(const char *segid, int resid, const char *aname)
53 {
54  return molecule->get_atom_from_name(segid,resid,aname);
55 }
56 
58  getNumAtoms(const char* segid, int resid) // 0 on error
59 {
60  return molecule->get_residue_size(segid,resid);
61 }
62 
64  getAtomID(const char *segid, int resid, int index)
65 {
66  return molecule->get_atom_from_index_in_residue(segid,resid,index);
67 }
68 
69 double GlobalMasterEasy::getMass(int atomid)
70 {
71  if ( atomid < 0 || atomid >= molecule->numAtoms ) return -1.; // failure
72  return molecule->atommass(atomid);
73 }
74 
75 
77 {
78  if ( atomid < 0 || atomid >= molecule->numAtoms ) return -1; // failure
79  modifyRequestedAtoms().add(atomid);
80  return 0; // success
81 }
82 
83 int GlobalMasterEasy::getPosition(int atomid, Position &position)
84 {
88  for ( ; a_i != a_e; ++a_i, ++p_i ) {
89  if ( *a_i == atomid ) {
90  position = *p_i;
91  return 0; // success
92  }
93  }
94  return -1; // failure
95 }
96 
97 int GlobalMasterEasy::addForce(int atomid, Force force)
98 {
99  if ( atomid < 0 || atomid >= molecule->numAtoms ) return -1; // failure
100  modifyForcedAtoms().add(atomid);
101  modifyAppliedForces().add(force);
102  return 0; // success
103 }
104 
106  energy += e;
107 }
108 
109 void GlobalMasterEasy::initialize() {
110  DebugM(1,"Here\n");
111  DebugM(4,"Initializing master\n");
112 
113  // Get the script for subclasses
114  StringList *script = Node::Object()->configList->find(configName);
115 
116  config = new char[1];
117  config[0] = '\0';
118 
119  for ( ; script; script = script->next) {
120  if ( strstr(script->data,"\n") ) {
121  size_t add_len = strlen(script->data);
122  size_t config_len = 0;
123  config_len = strlen(config);
124  char *new_config = new char[config_len + add_len + 2];
125  strcpy(new_config,config);
126  strcat(new_config,script->data);
127  strcat(new_config,"\n"); // just to be safe
128  delete [] config;
129  config = new_config;
130  } else {
131  FILE *infile = fopen(script->data,"r");
132  if ( ! infile ) {
133  char errmsg[256];
134  sprintf(errmsg,"Error trying to read file %s!\n",script->data);
135  NAMD_die(errmsg);
136  }
137  fseek(infile,0,SEEK_END);
138  size_t add_len = ftell(infile);
139  size_t config_len = 0;
140  config_len = strlen(config);
141  char *new_config = new char[config_len + add_len + 3];
142  strcpy(new_config,config);
143  delete [] config;
144  config = new_config;
145  new_config += config_len;
146  rewind(infile);
147  fread(new_config,sizeof(char),add_len,infile);
148  new_config += add_len;
149  new_config[0] = '\n';
150  new_config[1] = '\0';
151  fclose(infile);
152  }
153  }
154 
155 }
156 
157 void GlobalMasterEasy::calculate() {
158  DebugM(1,"Here\n");
159 
160  /* zero out the forces */
163 
164  /* XXX is this necessary? */
166  modifyGroupForces().setall(Vector(0,0,0));
167  energy = 0.0;
168 
169  // Build results here
170  easy_calc();
171 
172  reduction->item(REDUCTION_MISC_ENERGY) += energy;
173  reduction->submit();
174 }
175 
176 void GlobalMasterEasy::easy_init(const char *) {
177  CkPrintf("Default GlobalMasterEasy::easy_init() called.\n");
178 }
179 
181  CkPrintf("Default GlobalMasterEasy::easy_calc() called.\n");
182 }
static Node * Object()
Definition: Node.h:86
virtual ~GlobalMasterEasy()
ForceList & modifyAppliedForces()
Definition: GlobalMaster.C:163
AtomIDList & modifyRequestedAtoms()
Definition: GlobalMaster.C:128
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:191
Definition: Vector.h:72
int getAtomID(const char *segid, int resid, const char *aname)
int addForce(int atomid, Force force)
BigReal & item(int i)
Definition: ReductionMgr.h:313
#define DebugM(x, y)
Definition: Debug.h:75
SubmitReduction * willSubmit(int setID, int size=-1)
Definition: ReductionMgr.C:366
static ReductionMgr * Object(void)
Definition: ReductionMgr.h:279
int add(const Elem &elem)
Definition: ResizeArray.h:101
PositionList::const_iterator getAtomPositionBegin()
Definition: GlobalMaster.C:199
BigRealList::const_iterator getGroupMassEnd()
Definition: GlobalMaster.C:240
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:158
int numAtoms
Definition: Molecule.h:585
void NAMD_die(const char *err_msg)
Definition: common.C:147
BigRealList::const_iterator getGroupMassBegin()
Definition: GlobalMaster.C:235
ForceList & modifyGroupForces()
Definition: GlobalMaster.C:168
Real atommass(int anum) const
Definition: Molecule.h:1107
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:195
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
virtual void easy_calc(void)
void submit(void)
Definition: ReductionMgr.h:324
StringList * find(const char *name) const
Definition: ConfigList.C:341
Molecule * molecule
Definition: Node.h:179
double BigReal
Definition: common.h:123