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

# User Rev Content
1 mmeineke 561 #include <iostream>
2    
3     using namespace std;
4    
5    
6 mmeineke 377 #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 mmeineke 420 void ForceFields::calcRcut( void ){
20    
21     #ifdef IS_MPI
22     double tempBig = bigSigma;
23 mmeineke 447 MPI_Allreduce( &tempBig, &bigSigma, 1, MPI_DOUBLE, MPI_MAX,
24     MPI_COMM_WORLD);
25 mmeineke 420 #endif //is_mpi
26    
27     //calc rCut and rList
28    
29 mmeineke 626 entry_plug->setRcut( 2.5 * bigSigma );
30 tim 781
31 mmeineke 420 }
32    
33 mmeineke 377 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 mmeineke 443 double* u_l;;
41     DirectionalAtom* dAtom;
42 mmeineke 670 SimState* config;
43 mmeineke 377
44     short int passedCalcPot = (short int)calcPot;
45     short int passedCalcStress = (short int)calcStress;
46    
47 gezelter 484 // forces are zeroed here, before any are accumulated.
48 mmeineke 377 // NOTE: do not rezero the forces in Fortran.
49    
50     for(i=0; i<entry_plug->n_atoms; i++){
51 gezelter 484 entry_plug->atoms[i]->zeroForces();
52 mmeineke 377 }
53    
54 mmeineke 423 for(i=0; i<entry_plug->n_mol; i++ ){
55 mmeineke 428 entry_plug->molecules[i].calcForces();
56 mmeineke 389 }
57    
58 mmeineke 670 config = entry_plug->getConfiguration();
59 mmeineke 597
60 mmeineke 670 frc = config->getFrcArray();
61     pos = config->getPosArray();
62     trq = config->getTrqArray();
63     A = config->getAmatArray();
64     u_l = config->getUlArray();
65 mmeineke 561
66 mmeineke 377 isError = 0;
67     entry_plug->lrPot = 0.0;
68 mmeineke 393
69 chuckv 479 for (i=0; i<9; i++) {
70     entry_plug->tau[i] = 0.0;
71     }
72 chuckv 438
73 mmeineke 377 fortranForceLoop( pos,
74     A,
75     u_l,
76     frc,
77     trq,
78 chuckv 479 entry_plug->tau,
79 mmeineke 377 &(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 mmeineke 597
97 mmeineke 377
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     }