| 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; |