| 2 |
|
#include "simError.h" |
| 3 |
|
#include <cmath> |
| 4 |
|
template<typename T> ZConstraint<T>::ZConstraint(SimInfo* theInfo, ForceFields* the_ff) |
| 5 |
< |
: T(theInfo, the_ff), fz(NULL), curZPos(NULL), fzOut(NULL), |
| 6 |
< |
indexOfZConsMols(NULL), forcePolicy(NULL), curZconsTime(0) |
| 5 |
> |
: T(theInfo, the_ff), indexOfZConsMols(NULL), fz(NULL), curZPos(NULL), |
| 6 |
> |
fzOut(NULL), curZconsTime(0), forcePolicy(NULL) |
| 7 |
|
{ |
| 8 |
|
|
| 9 |
|
//get properties from SimInfo |
| 213 |
|
|
| 214 |
|
//if user does not specify the zpos for the zconstraint molecule |
| 215 |
|
//its initial z coordinate will be used as default |
| 216 |
< |
for(int i = 0; i < parameters->size(); i++){ |
| 216 |
> |
for(int i = 0; i < (int)(parameters->size()); i++){ |
| 217 |
|
|
| 218 |
|
if(!(*parameters)[i].havingZPos){ |
| 219 |
|
#ifndef IS_MPI |
| 227 |
|
//query which processor current zconstraint molecule belongs to |
| 228 |
|
int *MolToProcMap; |
| 229 |
|
int whichNode; |
| 230 |
< |
double initZPos; |
| 230 |
> |
|
| 231 |
|
MolToProcMap = mpiSim->getMolToProcMap(); |
| 232 |
|
whichNode = MolToProcMap[(*parameters)[i].zconsIndex]; |
| 233 |
|
|
| 304 |
|
} |
| 305 |
|
|
| 306 |
|
//determine the states of z-constraint molecules |
| 307 |
< |
for(int i = 0; i < zconsMols.size(); i++){ |
| 307 |
> |
for(int i = 0; i < (int)(zconsMols.size()); i++){ |
| 308 |
|
indexOfZConsMols[i] = zconsMols[i]->getGlobalIndex(); |
| 309 |
|
|
| 310 |
|
zconsMols[i]->getCOM(COM); |
| 320 |
|
double totalMassOfUncons_local; |
| 321 |
|
totalMassOfUncons_local = 0; |
| 322 |
|
|
| 323 |
< |
for(int i = 0; i < unconsMols.size(); i++) |
| 323 |
> |
for(int i = 0; i < (int)(unconsMols.size()); i++) |
| 324 |
|
totalMassOfUncons_local += unconsMols[i]->getTotalMass(); |
| 325 |
|
|
| 326 |
|
#ifndef IS_MPI |
| 333 |
|
//get total number of unconstrained atoms |
| 334 |
|
int nUnconsAtoms_local; |
| 335 |
|
nUnconsAtoms_local = 0; |
| 336 |
< |
for(int i = 0; i < unconsMols.size(); i++) |
| 336 |
> |
for(int i = 0; i < (int)(unconsMols.size()); i++) |
| 337 |
|
nUnconsAtoms_local += unconsMols[i]->getNAtoms(); |
| 338 |
|
|
| 339 |
|
#ifndef IS_MPI |
| 408 |
|
} |
| 409 |
|
|
| 410 |
|
//determine the states of z-constraint molecules |
| 411 |
< |
for(int i = 0; i < zconsMols.size(); i++){ |
| 411 |
> |
for(int i = 0; i < (int)(zconsMols.size()); i++){ |
| 412 |
|
zconsMols[i]->getCOM(COM); |
| 413 |
|
if (fabs(zPos[i] - COM[whichDirection]) < zconsTol) |
| 414 |
|
states.push_back(zcsFixed); |
| 440 |
|
simError(); |
| 441 |
|
} |
| 442 |
|
|
| 443 |
< |
for(int i = 0; i < zconsMols.size(); i++){ |
| 443 |
> |
for(int i = 0; i < (int)(zconsMols.size()); i++){ |
| 444 |
|
indexOfZConsMols[i] = zconsMols[i]->getGlobalIndex(); |
| 445 |
|
} |
| 446 |
|
|
| 559 |
|
|
| 560 |
|
//write out forces and current positions of z-constraint molecules |
| 561 |
|
if(info->getTime() >= curZconsTime){ |
| 562 |
< |
for(int i = 0; i < zconsMols.size(); i++){ |
| 562 |
> |
for(int i = 0; i < (int)(zconsMols.size()); i++){ |
| 563 |
|
zconsMols[i]->getCOM(COM); |
| 564 |
|
curZPos[i] = COM[whichDirection]; |
| 565 |
|
|
| 654 |
|
|
| 655 |
|
//zero out the velocities of center of mass of fixed z-constrained molecules |
| 656 |
|
|
| 657 |
< |
for(int i = 0; i < zconsMols.size(); i++){ |
| 657 |
> |
for(int i = 0; i < (int)(zconsMols.size()); i++){ |
| 658 |
|
|
| 659 |
|
if (states[i] == zcsFixed){ |
| 660 |
|
|
| 695 |
|
MVzOfMovingMols_local = 0; |
| 696 |
|
totalMassOfMovingZMols_local = 0; |
| 697 |
|
|
| 698 |
< |
for(int i =0; i < unconsMols.size(); i++){ |
| 698 |
> |
for(int i =0; i < (int)(unconsMols.size()); i++){ |
| 699 |
|
unconsMols[i]->getCOMvel(COMvel); |
| 700 |
|
MVzOfMovingMols_local += massOfUnconsMols[i] * COMvel[whichDirection]; |
| 701 |
|
} |
| 702 |
|
|
| 703 |
< |
for(int i = 0; i < zconsMols.size(); i++){ |
| 703 |
> |
for(int i = 0; i < (int)(zconsMols.size()); i++){ |
| 704 |
|
if (states[i] == zcsMoving){ |
| 705 |
|
zconsMols[i]->getCOMvel(COMvel); |
| 706 |
|
MVzOfMovingMols_local += massOfZConsMols[i] * COMvel[whichDirection]; |
| 722 |
|
|
| 723 |
|
//modify the velocites of unconstrained molecules |
| 724 |
|
Atom** unconsAtoms; |
| 725 |
< |
for(int i = 0; i < unconsMols.size(); i++){ |
| 725 |
> |
for(int i = 0; i < (int)(unconsMols.size()); i++){ |
| 726 |
|
|
| 727 |
|
unconsAtoms = unconsMols[i]->getMyAtoms(); |
| 728 |
|
for(int j = 0; j < unconsMols[i]->getNAtoms();j++){ |
| 735 |
|
|
| 736 |
|
//modify the velocities of moving z-constrained molecuels |
| 737 |
|
Atom** movingZAtoms; |
| 738 |
< |
for(int i = 0; i < zconsMols.size(); i++){ |
| 738 |
> |
for(int i = 0; i < (int)(zconsMols.size()); i++){ |
| 739 |
|
|
| 740 |
|
if (states[i] ==zcsMoving){ |
| 741 |
|
|
| 771 |
|
Atom** zconsAtoms; |
| 772 |
|
double totalFZ; |
| 773 |
|
double totalFZ_local; |
| 774 |
– |
double COMvel[3]; |
| 774 |
|
double COM[3]; |
| 775 |
|
double force[3]; |
| 776 |
|
|
| 784 |
|
//cout << "before zero out z-constraint force on fixed z-constraint molecuels " |
| 785 |
|
// << "total force is " << calcTotalForce() << endl; |
| 786 |
|
|
| 787 |
< |
for(int i = 0; i < zconsMols.size(); i++){ |
| 787 |
> |
for(int i = 0; i < (int)(zconsMols.size()); i++){ |
| 788 |
|
|
| 789 |
|
if (states[i] == zcsFixed){ |
| 790 |
|
|
| 820 |
|
force[1]= 0; |
| 821 |
|
force[2]= 0; |
| 822 |
|
|
| 823 |
< |
for(int i = 0; i < zconsMols.size(); i++){ |
| 823 |
> |
for(int i = 0; i < (int)(zconsMols.size()); i++){ |
| 824 |
|
|
| 825 |
|
if (states[i] == zcsFixed){ |
| 826 |
|
|
| 846 |
|
force[2]= 0; |
| 847 |
|
|
| 848 |
|
//modify the forces of unconstrained molecules |
| 849 |
< |
for(int i = 0; i < unconsMols.size(); i++){ |
| 849 |
> |
for(int i = 0; i < (int)(unconsMols.size()); i++){ |
| 850 |
|
|
| 851 |
|
Atom** unconsAtoms = unconsMols[i]->getMyAtoms(); |
| 852 |
|
|
| 859 |
|
} |
| 860 |
|
|
| 861 |
|
//modify the forces of moving z-constrained molecules |
| 862 |
< |
for(int i = 0; i < zconsMols.size(); i++) { |
| 862 |
> |
for(int i = 0; i < (int)(zconsMols.size()); i++) { |
| 863 |
|
if (states[i] == zcsMoving){ |
| 864 |
|
|
| 865 |
|
Atom** movingZAtoms = zconsMols[i]->getMyAtoms(); |
| 896 |
|
|
| 897 |
|
totalFZ_local = 0; |
| 898 |
|
|
| 899 |
< |
for(int i = 0; i < zconsMols.size(); i++) { |
| 899 |
> |
for(int i = 0; i < (int)(zconsMols.size()); i++) { |
| 900 |
|
|
| 901 |
|
if (states[i] == zcsMoving){ |
| 902 |
|
zconsMols[i]->getCOM(COM); |
| 938 |
|
force[2]= 0; |
| 939 |
|
|
| 940 |
|
//modify the forces of unconstrained molecules |
| 941 |
< |
for(int i = 0; i < unconsMols.size(); i++){ |
| 941 |
> |
for(int i = 0; i < (int)(unconsMols.size()); i++){ |
| 942 |
|
|
| 943 |
|
Atom** unconsAtoms = unconsMols[i]->getMyAtoms(); |
| 944 |
|
|
| 967 |
|
|
| 968 |
|
changed_local = 0; |
| 969 |
|
|
| 970 |
< |
for(int i =0; i < zconsMols.size(); i++){ |
| 970 |
> |
for(int i =0; i < (int)(zconsMols.size()); i++){ |
| 971 |
|
|
| 972 |
|
zconsMols[i]->getCOM(COM); |
| 973 |
|
diff = fabs(COM[whichDirection] - zPos[i]); |
| 999 |
|
|
| 1000 |
|
havingFixed_local = 0; |
| 1001 |
|
|
| 1002 |
< |
for(int i = 0; i < zconsMols.size(); i++) |
| 1002 |
> |
for(int i = 0; i < (int)(zconsMols.size()); i++) |
| 1003 |
|
if (states[i] == zcsFixed){ |
| 1004 |
|
havingFixed_local = 1; |
| 1005 |
|
break; |
| 1025 |
|
|
| 1026 |
|
havingMoving_local = 0; |
| 1027 |
|
|
| 1028 |
< |
for(int i = 0; i < zconsMols.size(); i++) |
| 1028 |
> |
for(int i = 0; i < (int)(zconsMols.size()); i++) |
| 1029 |
|
if (states[i] == zcsMoving){ |
| 1030 |
|
havingMoving_local = 1; |
| 1031 |
|
break; |
| 1107 |
|
|
| 1108 |
|
massOfZCons_local = 0; |
| 1109 |
|
|
| 1110 |
< |
for(int i = 0; i < massOfZConsMols.size(); i++){ |
| 1110 |
> |
for(int i = 0; i < (int)(massOfZConsMols.size()); i++){ |
| 1111 |
|
massOfZCons_local += massOfZConsMols[i]; |
| 1112 |
|
} |
| 1113 |
|
#ifndef IS_MPI |
| 1158 |
|
int nMovingZAtoms; |
| 1159 |
|
|
| 1160 |
|
nMovingZAtoms_local = 0; |
| 1161 |
< |
for(int i = 0; i < (zconsIntegrator->zconsMols).size(); i++) |
| 1161 |
> |
for(int i = 0; i < (int)((zconsIntegrator->zconsMols).size()); i++) |
| 1162 |
|
if((zconsIntegrator->states)[i] == (zconsIntegrator->zcsMoving)) |
| 1163 |
|
nMovingZAtoms_local += (zconsIntegrator->zconsMols)[i]->getNAtoms(); |
| 1164 |
|
|
| 1196 |
|
double massOfMovingZAtoms; |
| 1197 |
|
|
| 1198 |
|
massOfMovingZAtoms_local = 0; |
| 1199 |
< |
for(int i = 0; i < (zconsIntegrator->zconsMols).size(); i++) |
| 1199 |
> |
for(int i = 0; i < (int)((zconsIntegrator->zconsMols).size()); i++) |
| 1200 |
|
if((zconsIntegrator->states)[i] == (zconsIntegrator->zcsMoving)) |
| 1201 |
|
massOfMovingZAtoms_local += (zconsIntegrator->zconsMols)[i]->getTotalMass(); |
| 1202 |
|
|