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