ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/ForceFields.cpp
Revision: 781
Committed: Mon Sep 22 23:07:57 2003 UTC (20 years, 9 months ago) by tim
File size: 2344 byte(s)
Log Message:
fix bug in calculating maxCutoff

File Contents

# Content
1 #include <iostream>
2
3 using namespace std;
4
5
6 #include <cstdlib>
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->setRcut( 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 DirectionalAtom* dAtom;
42 SimState* config;
43
44 short int passedCalcPot = (short int)calcPot;
45 short int passedCalcStress = (short int)calcStress;
46
47 // forces are zeroed here, before any are accumulated.
48 // NOTE: do not rezero the forces in Fortran.
49
50 for(i=0; i<entry_plug->n_atoms; i++){
51 entry_plug->atoms[i]->zeroForces();
52 }
53
54 for(i=0; i<entry_plug->n_mol; i++ ){
55 entry_plug->molecules[i].calcForces();
56 }
57
58 config = entry_plug->getConfiguration();
59
60 frc = config->getFrcArray();
61 pos = config->getPosArray();
62 trq = config->getTrqArray();
63 A = config->getAmatArray();
64 u_l = config->getUlArray();
65
66 isError = 0;
67 entry_plug->lrPot = 0.0;
68
69 for (i=0; i<9; i++) {
70 entry_plug->tau[i] = 0.0;
71 }
72
73 fortranForceLoop( pos,
74 A,
75 u_l,
76 frc,
77 trq,
78 entry_plug->tau,
79 &(entry_plug->lrPot),
80 &passedCalcPot,
81 &passedCalcStress,
82 &isError );
83
84 if( isError ){
85 sprintf( painCave.errMsg,
86 "Error returned from the fortran force calculation.\n" );
87 painCave.isFatal = 1;
88 simError();
89 }
90
91 #ifdef IS_MPI
92 sprintf( checkPointMsg,
93 "returned from the force calculation.\n" );
94 MPIcheckPoint();
95 #endif // is_mpi
96
97
98 }
99
100
101 void ForceFields::initFortran(int ljMixPolicy, int useReactionField ){
102
103 int isError;
104
105 isError = 0;
106 initFortranFF( &ljMixPolicy, &useReactionField, &isError );
107
108 if(isError){
109 sprintf( painCave.errMsg,
110 "ForceField error: There was an error initializing the forceField in fortran.\n" );
111 painCave.isFatal = 1;
112 simError();
113 }
114
115
116 #ifdef IS_MPI
117 sprintf( checkPointMsg, "ForceField successfully initialized the fortran component list.\n" );
118 MPIcheckPoint();
119 #endif // is_mpi
120
121 }