ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/UseTheForce/EAM_FF.cpp
(Generate patch)

Comparing trunk/OOPSE-4/src/UseTheForce/EAM_FF.cpp (file contents):
Revision 2169 by chuckv, Tue Apr 12 17:12:27 2005 UTC vs.
Revision 2501 by chuckv, Thu Dec 8 15:38:49 2005 UTC

# Line 1 | Line 1
1 < /*
1 > /*
2   * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3   *
4   * The University of Notre Dame grants you ("Licensee") a
# Line 54 | Line 54
54   #include "io/BondTypesSectionParser.hpp"
55   #include "io/BendTypesSectionParser.hpp"
56   #include "io/TorsionTypesSectionParser.hpp"
57 + #include "io/OptionSectionParser.hpp"
58   #include "UseTheForce/ForceFieldCreator.hpp"
59   #include "utils/simError.h"
60   namespace oopse {
61      
62 < EAM_FF::EAM_FF(){
62 >  EAM_FF::EAM_FF(){
63  
64      //set default force field filename
65      setForceFieldFileName("EAM.frc");
66  
67      //the order of adding section parsers are important
68 +    //OptionSectionParser must come first to set options for other parsers
69      //DirectionalAtomTypesSectionParser should be added before AtomTypesSectionParser Since
70      //These two section parsers will actually create "real" AtomTypes (AtomTypesSectionParser will create
71      //AtomType and DirectionalAtomTypesSectionParser will creat DirectionalAtomType which is a subclass
# Line 73 | Line 75 | EAM_FF::EAM_FF(){
75      //Make sure they are added after DirectionalAtomTypesSectionParser and AtomTypesSectionParser.
76      //The order of BondTypesSectionParser, BendTypesSectionParser and TorsionTypesSectionParser are
77      //not important.
78 <    spMan_.push_back(new DirectionalAtomTypesSectionParser());
78 >    spMan_.push_back(new OptionSectionParser(forceFieldOptions_));
79      spMan_.push_back(new AtomTypesSectionParser());
80 <    spMan_.push_back(new LennardJonesAtomTypesSectionParser());
81 <    spMan_.push_back(new ChargeAtomTypesSectionParser());
80 <    spMan_.push_back(new MultipoleAtomTypesSectionParser());
81 <    spMan_.push_back(new EAMAtomTypesSectionParser());
82 <    spMan_.push_back(new StickyAtomTypesSectionParser());
83 <    spMan_.push_back(new BondTypesSectionParser());
84 <    spMan_.push_back(new BendTypesSectionParser());
85 <    spMan_.push_back(new TorsionTypesSectionParser());
80 >    spMan_.push_back(new EAMAtomTypesSectionParser(forceFieldOptions_));
81 >
82      
83 < }
83 >  }
84  
85 < void EAM_FF::parse(const std::string& filename) {
85 >  void EAM_FF::parse(const std::string& filename) {
86      ifstrstream* ffStream;
87      ffStream = openForceFieldFile(filename);
88  
# Line 96 | Line 92 | void EAM_FF::parse(const std::string& filename) {
92      AtomType* at;
93  
94      for (at = atomTypeCont_.beginType(i); at != NULL; at = atomTypeCont_.nextType(i)) {
95 <        at->makeFortranAtomType();
95 >      at->makeFortranAtomType();
96      }
97  
98      for (at = atomTypeCont_.beginType(i); at != NULL; at = atomTypeCont_.nextType(i)) {
99 <        at->complete();
99 >      at->complete();
100      }
101  
102      delete ffStream;
103 < }
103 >  }
104  
105  
106 < double EAM_FF::getRcutFromAtomType(AtomType* at){
106 >  double EAM_FF::getRcutFromAtomType(AtomType* at){
107      double rcut = 0.0;    
108      if (at->isEAM()) {
109 <        GenericData* data = at->getPropertyByName("EAM");
110 <        if (data != NULL) {
111 <            EAMParamGenericData* eamData = dynamic_cast<EAMParamGenericData*>(data);
109 >      GenericData* data = at->getPropertyByName("EAM");
110 >      if (data != NULL) {
111 >        EAMParamGenericData* eamData = dynamic_cast<EAMParamGenericData*>(data);
112  
113 <            if (eamData != NULL) {
113 >        if (eamData != NULL) {
114  
115 <                EAMParam& eamParam = eamData->getData();
116 <                rcut =  eamParam.rcut;
117 <            } else {
118 <                    sprintf( painCave.errMsg,
119 <                           "Can not cast GenericData to EAMParam\n");
120 <                    painCave.severity = OOPSE_ERROR;
121 <                    painCave.isFatal = 1;
122 <                    simError();          
123 <            }
124 <        } else {
125 <            sprintf( painCave.errMsg, "Can not find EAM Parameters\n");
126 <            painCave.severity = OOPSE_ERROR;
127 <            painCave.isFatal = 1;
128 <            simError();          
129 <        }
115 >          EAMParam& eamParam = eamData->getData();
116 >          rcut =  eamParam.rcut;
117 >        } else {
118 >          sprintf( painCave.errMsg,
119 >                   "Can not cast GenericData to EAMParam\n");
120 >          painCave.severity = OOPSE_ERROR;
121 >          painCave.isFatal = 1;
122 >          simError();          
123 >        }
124 >      } else {
125 >        sprintf( painCave.errMsg, "Can not find EAM Parameters\n");
126 >        painCave.severity = OOPSE_ERROR;
127 >        painCave.isFatal = 1;
128 >        simError();          
129 >      }
130      }    else {
131 <        rcut = ForceField::getRcutFromAtomType(at);
131 >      rcut = ForceField::getRcutFromAtomType(at);
132      }
133    
134      return rcut;    
135 < }
135 >  }
136  
137    EAM_FF::~EAM_FF(){
138      // We need to clean up the fortran side so we don't have bad things happen if

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines