ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/ForceFields.cpp
Revision: 841
Committed: Wed Oct 29 17:55:28 2003 UTC (20 years, 8 months ago) by mmeineke
File size: 3403 byte(s)
Log Message:
som efixes to the way rcut is setup, as well as additional debugging comments.

File Contents

# Content
1 #include <iostream>
2
3 using namespace std;
4
5
6 #include <stdlib.h>
7
8 #ifdef IS_MPI
9 #include <mpi.h>
10 #endif // is_mpi
11
12
13 #include "simError.h"
14 #include "ForceFields.hpp"
15 #include "Atom.hpp"
16 #include "fortranWrappers.hpp"
17
18
19 void ForceFields::calcRcut( void ){
20
21 #ifdef IS_MPI
22 double tempBig = bigSigma;
23 MPI_Allreduce( &tempBig, &bigSigma, 1, MPI_DOUBLE, MPI_MAX,
24 MPI_COMM_WORLD);
25 #endif //is_mpi
26
27 //calc rCut and rList
28
29 entry_plug->setDefaultRcut( 2.5 * bigSigma );
30
31 }
32
33 void ForceFields::doForces( int calcPot, int calcStress ){
34
35 int i, isError;
36 double* frc;
37 double* pos;
38 double* trq;
39 double* A;
40 double* u_l;;
41 SimState* config;
42
43 short int passedCalcPot = (short int)calcPot;
44 short int passedCalcStress = (short int)calcStress;
45
46 // forces are zeroed here, before any are accumulated.
47 // NOTE: do not rezero the forces in Fortran.
48
49 for(i=0; i<entry_plug->n_atoms; i++){
50 entry_plug->atoms[i]->zeroForces();
51 }
52
53 for(i=0; i<entry_plug->n_mol; i++ ){
54 entry_plug->molecules[i].calcForces();
55 }
56
57 config = entry_plug->getConfiguration();
58
59 frc = config->getFrcArray();
60 pos = config->getPosArray();
61 trq = config->getTrqArray();
62 A = config->getAmatArray();
63 u_l = config->getUlArray();
64
65 isError = 0;
66 entry_plug->lrPot = 0.0;
67
68 for (i=0; i<9; i++) {
69 entry_plug->tau[i] = 0.0;
70 }
71
72 std::cerr << "before\n"
73 << " force[0] = " << frc[0] << "\n"
74 << " pos[0] = " << pos[0] << "\n"
75 << " trq[0] = " << trq[0] << "\n"
76 << " A[0] = " << A[0] << "\n"
77 << " tau = " << entry_plug->tau[0] << ", " << entry_plug->tau[1] << ", " << entry_plug->tau[2] << "\n"
78 << " " << entry_plug->tau[3] << ", " << entry_plug->tau[4] << ", " << entry_plug->tau[5] << "\n"
79 << " " << entry_plug->tau[6] << ", " << entry_plug->tau[7] << ", " << entry_plug->tau[8] << "\n\n";
80
81 fortranForceLoop( pos,
82 A,
83 u_l,
84 frc,
85 trq,
86 entry_plug->tau,
87 &(entry_plug->lrPot),
88 &passedCalcPot,
89 &passedCalcStress,
90 &isError );
91
92
93 std::cerr << "after\n"
94 << " force[0] = " << frc[0] << "\n"
95 << " pos[0] = " << pos[0] << "\n"
96 << " trq[0] = " << trq[0] << "\n"
97 << " A[0] = " << A[0] << "\n"
98 << " tau = " << entry_plug->tau[0] << ", " << entry_plug->tau[1] << ", " << entry_plug->tau[2] << "\n"
99 << " " << entry_plug->tau[3] << ", " << entry_plug->tau[4] << ", " << entry_plug->tau[5] << "\n"
100 << " " << entry_plug->tau[6] << ", " << entry_plug->tau[7] << ", " << entry_plug->tau[8] << "\n\n";
101
102 if( isError ){
103 sprintf( painCave.errMsg,
104 "Error returned from the fortran force calculation.\n" );
105 painCave.isFatal = 1;
106 simError();
107 }
108
109 #ifdef IS_MPI
110 sprintf( checkPointMsg,
111 "returned from the force calculation.\n" );
112 MPIcheckPoint();
113 #endif // is_mpi
114
115
116 }
117
118
119 void ForceFields::initFortran(int ljMixPolicy, int useReactionField ){
120
121 int isError;
122
123 isError = 0;
124 initFortranFF( &ljMixPolicy, &useReactionField, &isError );
125
126 if(isError){
127 sprintf( painCave.errMsg,
128 "ForceField error: There was an error initializing the forceField in fortran.\n" );
129 painCave.isFatal = 1;
130 simError();
131 }
132
133
134 #ifdef IS_MPI
135 sprintf( checkPointMsg, "ForceField successfully initialized the fortran component list.\n" );
136 MPIcheckPoint();
137 #endif // is_mpi
138
139 }