1 |
< |
#include "ZconsVisitor.hpp" |
1 |
> |
#include "visitors/ZconsVisitor.hpp" |
2 |
|
#include <cmath> |
3 |
|
|
4 |
+ |
namespace oopse { |
5 |
+ |
|
6 |
|
ZConsVisitor::ZConsVisitor(SimInfo* info) : BaseVisitor(), zconsReader(NULL){ |
7 |
|
GenericData* data; |
8 |
< |
DoubleData* tolerance; |
8 |
> |
DoubleGenericData* tolerance; |
9 |
|
ZConsParaData* zConsParaData; |
10 |
< |
StringData* filename; |
11 |
< |
DoubleData* sampleTime; |
10 |
> |
StringGenericData* filename; |
11 |
> |
DoubleGenericData* sampleTime; |
12 |
|
vector<ZConsParaItem>* parameters; |
13 |
|
|
14 |
|
this->info = info; |
15 |
|
visitorName = "ZConsVisitor"; |
16 |
|
|
17 |
|
//retrieve tolerance for z-constraint molecuels |
18 |
< |
data = info->getProperty(ZCONSTOL_ID); |
18 |
> |
data = info->getPropertyByName(ZCONSTOL_ID); |
19 |
|
|
20 |
|
if (!data){ |
21 |
|
cerr << "Can not get zconstraint tolerance from SimInfo" << endl; |
23 |
|
return; |
24 |
|
} |
25 |
|
else{ |
26 |
< |
tolerance = dynamic_cast<DoubleData*>(data); |
26 |
> |
tolerance = dynamic_cast<DoubleGenericData*>(data); |
27 |
|
|
28 |
|
if (!tolerance){ |
29 |
|
cerr << "Can not get zconstraint tolerance from SimInfo" << endl; |
36 |
|
} |
37 |
|
|
38 |
|
//retrieve sample time of z-contraint |
39 |
< |
data = info->getProperty(ZCONSTIME_ID); |
39 |
> |
data = info->getPropertyByName(ZCONSTIME_ID); |
40 |
|
|
41 |
|
if (!data){ |
42 |
|
cerr << "Can not get zcons time from SimInfo" << endl; |
44 |
|
return; |
45 |
|
} |
46 |
|
else{ |
47 |
< |
sampleTime = dynamic_cast<DoubleData*>(data); |
47 |
> |
sampleTime = dynamic_cast<DoubleGenericData*>(data); |
48 |
|
|
49 |
|
if (!sampleTime){ |
50 |
|
cerr << "Can not get zcons time from SimInfo" << endl; |
57 |
|
} |
58 |
|
|
59 |
|
//retrieve index of z-constraint molecules |
60 |
< |
data = info->getProperty(ZCONSPARADATA_ID); |
60 |
> |
data = info->getPropertyByName(ZCONSPARADATA_ID); |
61 |
|
if (!data){ |
62 |
|
cerr << "Can not get index of z-constraint molecules from SimInfo" << endl; |
63 |
|
haveZcons = false; |
95 |
|
}//end if (!data |
96 |
|
|
97 |
|
//retrieve output filename of z force |
98 |
< |
data = info->getProperty(ZCONSFILENAME_ID); |
98 |
> |
data = info->getPropertyByName(ZCONSFILENAME_ID); |
99 |
|
if (!data){ |
100 |
|
cerr << "Can not get filename of z-constraint output from SimInfo" << endl; |
101 |
|
haveZcons = false; |
102 |
|
return; |
103 |
|
} |
104 |
|
else{ |
105 |
< |
filename = dynamic_cast<StringData*>(data); |
105 |
> |
filename = dynamic_cast<StringGenericData*>(data); |
106 |
|
|
107 |
|
if (!filename){ |
108 |
|
cerr << "Can not get filename of z-constraint output from SimInfo" << endl; |
130 |
|
|
131 |
|
void ZConsVisitor::visit(Atom* atom){ |
132 |
|
string prefix; |
133 |
< |
if(isZconstraint(atom->getIndex(), prefix)) |
133 |
> |
if(isZconstraint(atom->getLocalIndex(), prefix)) |
134 |
|
internalVisit(atom, prefix); |
135 |
|
} |
136 |
|
|
137 |
|
void ZConsVisitor::visit(DirectionalAtom* datom){ |
138 |
|
string prefix; |
139 |
|
|
140 |
< |
if(isZconstraint(datom->getIndex(), prefix)) |
140 |
> |
if(isZconstraint(datom->getLocalIndex(), prefix)) |
141 |
|
internalVisit(datom, prefix); |
142 |
|
} |
143 |
|
|
147 |
|
|
148 |
|
atoms = rb->getAtoms(); |
149 |
|
|
150 |
< |
if(isZconstraint(atoms[0]->getIndex(), prefix)) |
150 |
> |
if(isZconstraint(atoms[0]->getLocalIndex(), prefix)) |
151 |
|
internalVisit(rb, prefix); |
152 |
|
} |
153 |
|
|
155 |
|
Molecule* mols; |
156 |
|
mols = info->molecules; |
157 |
|
for(int i =0; i < info->n_mol; i++) |
158 |
< |
if(index == mols[i].getMyIndex()) |
158 |
> |
if(index == mols[i].getGlobalIndex()) |
159 |
|
return &mols[i]; |
160 |
|
|
161 |
|
return NULL; |
163 |
|
|
164 |
|
void ZConsVisitor::update(){ |
165 |
|
Molecule* mol; |
166 |
< |
double com[3]; |
166 |
> |
Vector3d com; |
167 |
|
ZConsState state; |
168 |
< |
Atom** atoms; |
169 |
< |
int natoms; |
168 |
> |
//Atom** atoms; |
169 |
> |
//int natoms; |
170 |
|
|
171 |
|
getZconsPos(info->currentTime); |
172 |
|
|
173 |
|
for(size_t i = 0; i < zconsMol.size(); i++){ |
174 |
< |
zconsMol[i]->getCOM(com); |
174 |
> |
com = zconsMol[i]->getCom(); |
175 |
|
|
176 |
|
if(fabs(com[2] - zconsPos[i]) < zconsTol) |
177 |
|
state = zsFixed; |
179 |
|
state = zsMoving; |
180 |
|
|
181 |
|
//update the state of zconstraint atom |
182 |
< |
natoms = zconsMol[i]->getNAtoms(); |
183 |
< |
atoms = zconsMol[i]->getMyAtoms(); |
184 |
< |
for(int j =0; j < natoms; j++) |
185 |
< |
zconsState[atoms[j]->getIndex()] = state; |
182 |
> |
//natoms = zconsMol[i]->getNAtoms(); |
183 |
> |
//atoms = zconsMol[i]->getMyAtoms(); |
184 |
> |
//for(int j =0; j < natoms; j++) |
185 |
> |
// zconsState[atoms[j]->getLocalIndex()] = state; |
186 |
> |
|
187 |
> |
std::vector<Atom*>::iterator j; |
188 |
> |
for (Atom* atom = zconsMol[i]->beginAtom(j); atom != NULL; atom = zconsMol[i]->nextAtom(j)) { |
189 |
> |
zconsState[atom->getLocalIndex()] = state; |
190 |
> |
} |
191 |
|
} |
192 |
|
|
193 |
|
} |
220 |
|
|
221 |
|
|
222 |
|
//if there is not atom data, just skip it |
223 |
< |
data = sd->getProperty("ATOMDATA"); |
223 |
> |
data = sd->getPropertyByName("ATOMDATA"); |
224 |
|
if(data != NULL){ |
225 |
|
atomData = dynamic_cast<AtomData*>(data); |
226 |
|
if(atomData == NULL) |
272 |
|
result += buffer; |
273 |
|
|
274 |
|
for(size_t i = 0; i < zconsMol.size(); ++i){ |
275 |
< |
sprintf(buffer ,"zconstraint molecule[%d] = %d\n", i, zconsMol[i]->getMyIndex()); |
275 |
> |
sprintf(buffer ,"zconstraint molecule[%d] = %d\n", i, zconsMol[i]->getGlobalIndex()); |
276 |
|
result += buffer; |
277 |
|
|
278 |
|
} |
283 |
|
|
284 |
|
return result; |
285 |
|
} |
286 |
+ |
|
287 |
+ |
|
288 |
+ |
}//namespace oopse |