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 1930 by gezelter, Wed Jan 12 22:41:40 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 <
66 <        }
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 >      }
70          
71      } else {
72 <      
72 >      sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Not enough tokens at line %d\n",
73 >              lineNo);
74 >      painCave.isFatal = 1;
75 >      simError();    
76      }
77              
78 +  }
79  
80 < }
80 >  void EAMAtomTypesSectionParser::parseEAMParamFile(ForceField& ff, AtomType* atomType,
81 >                                                    const std::string& potentialParamFile, int ident) {
82  
75 void EAMAtomTypesSectionParser::parseEAMParamFile(ForceField& ff, AtomType* atomType,
76    const std::string& potentialParamFile, int ident) {
77
83      ifstrstream* ppfStream = ff.openForceFieldFile(potentialParamFile);
84      const int bufferSize = 65535;
85      char buffer[bufferSize];
# Line 90 | 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 <            std::cerr << "Not enought tokens" << std::endl;
107 <        }
108 <    } else {
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 109 | 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 {
121 <            std::cerr << "Not enought tokens" << std::endl;
122 <        }
123 <    } 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 <    }
127 >        sprintf(painCave.errMsg, "EAMAtomTypesSectionParser Error: Not enough tokens\n");
128 >        painCave.isFatal = 1;
129 >        simError();            
130  
131 +      }
132 +    }
133 +    
134      parseEAMArray(*ppfStream, eamParam.Frhovals, eamParam.nrho);    
135      parseEAMArray(*ppfStream, eamParam.rvals, eamParam.nr);
136      parseEAMArray(*ppfStream, eamParam.rhovals, eamParam.nr);
137      
138      atomType->addProperty(new EAMParamGenericData("EAM", eamParam));
132 }
139  
140 < void EAMAtomTypesSectionParser::parseEAMArray(std::istream& input,
141 <    std::vector<double>& array, int num) {
140 >    delete ppfStream;
141 >  }
142 >
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 144 | Line 153 | void EAMAtomTypesSectionParser::parseEAMArray(std::ist
153      const int bufferSize = 65535;
154      char buffer[bufferSize];
155      std::string line;
147    int readLines = num/dataPerLine;
156      int lineCount = 0;
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 <
167 <        }
168 <        ++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 <        
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