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

Comparing trunk/OOPSE-2.0/src/io/EAMAtomTypesSectionParser.cpp (file contents):
Revision 2109 by tim, Thu Mar 10 20:28:17 2005 UTC vs.
Revision 2204 by gezelter, Fri Apr 15 22:04:00 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 45 | Line 45 | EAMAtomTypesSectionParser::EAMAtomTypesSectionParser()
45   #include "utils/simError.h"
46   namespace oopse {
47  
48 < EAMAtomTypesSectionParser::EAMAtomTypesSectionParser() {
48 >  EAMAtomTypesSectionParser::EAMAtomTypesSectionParser() {
49      setSectionName("EAMAtomTypes");
50 < }
50 >  }
51  
52 < void EAMAtomTypesSectionParser::parseLine(ForceField& ff,const std::string& line, int lineNo){
52 >  void EAMAtomTypesSectionParser::parseLine(ForceField& ff,const std::string& line, int lineNo){
53  
54      StringTokenizer tokenizer(line);
55  
56      if (tokenizer.countTokens() >= 2) {
57 <        std::string atomTypeName = tokenizer.nextToken();
58 <        std::string potentialParamFile = tokenizer.nextToken();
57 >      std::string atomTypeName = tokenizer.nextToken();
58 >      std::string potentialParamFile = tokenizer.nextToken();
59  
60 <        AtomType* atomType = ff.getAtomType(atomTypeName);
61 <        if (atomType != NULL) {
62 <            atomType->setEAM();                            
63 <            parseEAMParamFile(ff, atomType, potentialParamFile, atomType->getIdent());                                                    
64 <        } else {
65 <            sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Can not find AtomType [%s]\n",
60 >      AtomType* atomType = ff.getAtomType(atomTypeName);
61 >      if (atomType != NULL) {
62 >        atomType->setEAM();                            
63 >        parseEAMParamFile(ff, atomType, potentialParamFile, atomType->getIdent());                                                    
64 >      } else {
65 >        sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Can not find AtomType [%s]\n",
66                  atomTypeName.c_str());
67 <            painCave.isFatal = 1;
68 <            simError();  
69 <        }
67 >        painCave.isFatal = 1;
68 >        simError();  
69 >      }
70          
71      } else {
72 <        sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Not enough tokens at line %d\n",
73 <                lineNo);
74 <        painCave.isFatal = 1;
75 <        simError();    
72 >      sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Not enough tokens at line %d\n",
73 >              lineNo);
74 >      painCave.isFatal = 1;
75 >      simError();    
76      }
77              
78 < }
78 >  }
79  
80 < void EAMAtomTypesSectionParser::parseEAMParamFile(ForceField& ff, AtomType* atomType,
81 <    const std::string& potentialParamFile, int ident) {
80 >  void EAMAtomTypesSectionParser::parseEAMParamFile(ForceField& ff, AtomType* atomType,
81 >                                                    const std::string& potentialParamFile, int ident) {
82  
83      ifstrstream* ppfStream = ff.openForceFieldFile(potentialParamFile);
84      const int bufferSize = 65535;
# Line 95 | Line 95 | void EAMAtomTypesSectionParser::parseEAMParamFile(Forc
95      double latticeConstant;
96      std::string lattice;
97      if (ppfStream->getline(buffer, bufferSize)) {      
98 <        StringTokenizer tokenizer1(buffer);
98 >      StringTokenizer tokenizer1(buffer);
99          
100 <        if (tokenizer1.countTokens() >= 4) {
101 <            junk = tokenizer1.nextTokenAsInt();
102 <            mass = tokenizer1.nextTokenAsDouble();
103 <            latticeConstant = tokenizer1.nextTokenAsDouble();
104 <            lattice = tokenizer1.nextToken();
105 <        }else {
106 <            sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Not enough tokens\n");
107 <            painCave.isFatal = 1;
108 <            simError();  
109 <        }
100 >      if (tokenizer1.countTokens() >= 4) {
101 >        junk = tokenizer1.nextTokenAsInt();
102 >        mass = tokenizer1.nextTokenAsDouble();
103 >        latticeConstant = tokenizer1.nextTokenAsDouble();
104 >        lattice = tokenizer1.nextToken();
105 >      }else {
106 >        sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Not enough tokens\n");
107 >        painCave.isFatal = 1;
108 >        simError();  
109 >      }
110      }
111      
112      // The third line is nrho, drho, nr, dr and rcut
# Line 114 | Line 114 | void EAMAtomTypesSectionParser::parseEAMParamFile(Forc
114      eamParam.latticeConstant = latticeConstant;
115      
116      if (ppfStream->getline(buffer, bufferSize)) {
117 <        StringTokenizer tokenizer2(buffer);
117 >      StringTokenizer tokenizer2(buffer);
118  
119 <        if (tokenizer2.countTokens() >= 5){
120 <            eamParam.nrho = tokenizer2.nextTokenAsInt();
121 <            eamParam.drho = tokenizer2.nextTokenAsDouble();
122 <            eamParam.nr = tokenizer2.nextTokenAsInt();
123 <            eamParam.dr = tokenizer2.nextTokenAsDouble();
124 <            eamParam.rcut = tokenizer2.nextTokenAsDouble();
125 <        }else {
119 >      if (tokenizer2.countTokens() >= 5){
120 >        eamParam.nrho = tokenizer2.nextTokenAsInt();
121 >        eamParam.drho = tokenizer2.nextTokenAsDouble();
122 >        eamParam.nr = tokenizer2.nextTokenAsInt();
123 >        eamParam.dr = tokenizer2.nextTokenAsDouble();
124 >        eamParam.rcut = tokenizer2.nextTokenAsDouble();
125 >      }else {
126  
127 <            sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Not enough tokens\n");
128 <            painCave.isFatal = 1;
129 <            simError();            
127 >        sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Not enough tokens\n");
128 >        painCave.isFatal = 1;
129 >        simError();            
130  
131 <        }
131 >      }
132      }
133      
134      parseEAMArray(*ppfStream, eamParam.Frhovals, eamParam.nrho);    
# Line 138 | Line 138 | void EAMAtomTypesSectionParser::parseEAMParamFile(Forc
138      atomType->addProperty(new EAMParamGenericData("EAM", eamParam));
139  
140      delete ppfStream;
141 < }
141 >  }
142  
143 < void EAMAtomTypesSectionParser::parseEAMArray(std::istream& input,
144 <    std::vector<double>& array, int num) {
143 >  void EAMAtomTypesSectionParser::parseEAMArray(std::istream& input,
144 >                                                std::vector<double>& array, int num) {
145      
146      const int dataPerLine = 5;
147      if (num % dataPerLine != 0) {
# Line 157 | Line 157 | void EAMAtomTypesSectionParser::parseEAMArray(std::ist
157  
158      while(lineCount < nlinesToRead && input.getline(buffer, bufferSize) ){
159  
160 <        StringTokenizer tokenizer(buffer);
161 <        if (tokenizer.countTokens() >= dataPerLine) {
162 <            for (int i = 0; i < dataPerLine; ++i) {
163 <                array.push_back(tokenizer.nextTokenAsDouble());
164 <            }
165 <        } else {
166 <            sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Not enough tokens\n");
167 <            painCave.isFatal = 1;
168 <            simError();  
169 <        }
170 <        ++lineCount;
160 >      StringTokenizer tokenizer(buffer);
161 >      if (tokenizer.countTokens() >= dataPerLine) {
162 >        for (int i = 0; i < dataPerLine; ++i) {
163 >          array.push_back(tokenizer.nextTokenAsDouble());
164 >        }
165 >      } else {
166 >        sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Not enough tokens\n");
167 >        painCave.isFatal = 1;
168 >        simError();  
169 >      }
170 >      ++lineCount;
171      }
172  
173      if (lineCount < nlinesToRead) {
174 <        sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Not enough lines to read\n");
175 <        painCave.isFatal = 1;
176 <        simError();          
174 >      sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Not enough lines to read\n");
175 >      painCave.isFatal = 1;
176 >      simError();          
177      }
178      
179 < }
179 >  }
180  
181  
182   } //end namespace oopse

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines