ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/ForceFields.cpp
Revision: 892
Committed: Mon Dec 22 21:27:04 2003 UTC (20 years, 6 months ago) by chuckv
File size: 2556 byte(s)
Log Message:
Fixes to profile code.

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