14 |
|
#include "simpleBuilderCmd.hpp" |
15 |
|
#include "StringUtils.hpp" |
16 |
|
#include "LatticeFactory.hpp" |
17 |
+ |
#include "Vector3d.hpp" |
18 |
|
|
19 |
|
using namespace std; |
20 |
|
|
34 |
|
BaseLattice* simpleLat; |
35 |
|
int numMol; |
36 |
|
double latticeConstant; |
37 |
+ |
vector lc; |
38 |
|
double mass; |
39 |
|
double density; |
40 |
|
int nx, ny, nz; |
41 |
|
double Hmat[3][3]; |
42 |
|
MoLocator *locator; |
43 |
< |
double* posX; |
44 |
< |
double* posY; |
43 |
< |
double* posZ; |
43 |
> |
vector<Vector3d> latticePos; |
44 |
> |
vector<Vector3d> latticeOrt; |
45 |
|
int numMolPerCell; |
46 |
|
int curMolIndex; |
47 |
|
DumpWriter* writer; |
126 |
|
} |
127 |
|
|
128 |
|
//creat lattice |
129 |
< |
simpleLat = LatticeFactory::getInstance() ->createLattice(latticeType); |
129 |
> |
simpleLat = LatticeFactory::getInstance()->createLattice(latticeType); |
130 |
|
if(simpleLat == NULL){ |
131 |
|
cerr << "Error in creating lattice" << endl; |
132 |
|
exit(1); |
138 |
|
latticeConstant = pow(numMolPerCell * mass /density, 1.0/3.0); |
139 |
|
|
140 |
|
//set lattice constant |
141 |
< |
simpleLat->setLatticeConstant(latticeConstant); |
141 |
> |
lc.push_back(latticeConstant); |
142 |
> |
simpleLat->setLatticeConstant(lc); |
143 |
|
|
144 |
|
//calculate the total |
145 |
|
numMol = args_info.nx_arg * args_info.ny_arg * args_info.nz_arg * numMolPerCell; |
177 |
|
newSimSetup->parseFile(&outMdFileName[0] ); |
178 |
|
newSimSetup->createSim(); |
179 |
|
|
180 |
< |
//set Hamt |
180 |
> |
//set Hmat |
181 |
|
newInfo->setBoxM(Hmat); |
182 |
|
|
183 |
|
//allocat memory for storing pos, vel and etc |
186 |
|
newInfo.atoms[i]->setCoords(); |
187 |
|
|
188 |
|
//creat Molocator |
189 |
< |
locator = new MoLocator(newInfo->compStamps[0]); |
188 |
< |
|
189 |
< |
//allocate memory for posX, posY, posZ |
190 |
< |
|
191 |
< |
posX = new doule[numMolPerCell]; |
192 |
< |
if(posX == NULL){ |
193 |
< |
cerr << "memory allocation error" << endl; |
194 |
< |
exit(1); |
195 |
< |
} |
196 |
< |
|
197 |
< |
posY = new doule[numMolPerCell]; |
198 |
< |
if(posX == NULL){ |
199 |
< |
cerr << "memory allocation error" << endl; |
200 |
< |
exit(1); |
201 |
< |
} |
189 |
> |
locator = new MoLocator(newInfo->compStamps[0], newSimSetup->the_ff); |
190 |
|
|
203 |
– |
posZ = new doule[numMolPerCell]; |
204 |
– |
if(posX == NULL){ |
205 |
– |
cerr << "memory allocation error" << endl; |
206 |
– |
exit(1); |
207 |
– |
} |
208 |
– |
|
191 |
|
//place the molecules |
192 |
|
|
193 |
|
curMolIndex = 0; |
194 |
+ |
|
195 |
+ |
//get the orientation of the cell sites |
196 |
+ |
//for the same type of molecule in same lattice, it will not change |
197 |
+ |
latticeOrt = simpleLat->getLatticePointsOrt(); |
198 |
+ |
|
199 |
|
for(int i =0; i < nx; i++){ |
200 |
|
for(int j=0; j < ny; j++){ |
201 |
|
for(int k = 0; k < nz; k++){ |
215 |
– |
|
216 |
– |
simpleLat->getLatticePoints(&posX, &posY, &posZ, i, j, k); |
202 |
|
|
203 |
+ |
//get the position of the cell sites |
204 |
+ |
simpleLat->getLatticePointsPos(latticePos, i, j, k); |
205 |
+ |
|
206 |
|
for(int l = 0; l < numMolPerCell; l++) |
207 |
< |
locator->placeMol(posX[l], posY[l], posZ[l], newInfo->molecules[curMolIndex++]); |
207 |
> |
locator->placeMol(latticePos[l], latticeOrt[l], newInfo->molecules[curMolIndex++]); |
208 |
|
} |
209 |
|
} |
210 |
|
} |
231 |
|
if(!newSimSetup) |
232 |
|
delete newSimSetup; |
233 |
|
|
246 |
– |
if (posX) |
247 |
– |
delete[] posX; |
248 |
– |
|
249 |
– |
if (posY) |
250 |
– |
delete[] posY; |
251 |
– |
|
252 |
– |
if (posZ) |
253 |
– |
delete[] posZ; |
254 |
– |
|
234 |
|
if (writer != NULL) |
235 |
|
delete writer; |
236 |
|
return 0; |