ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-4/src/io/ElectrostaticAtomTypesSectionParser.cpp
(Generate patch)

Comparing branches/new_design/OOPSE-4/src/io/ElectrostaticAtomTypesSectionParser.cpp (file contents):
Revision 1790 by tim, Mon Nov 29 15:50:05 2004 UTC vs.
Revision 1815 by tim, Wed Dec 1 18:42:45 2004 UTC

# Line 25 | Line 25
25  
26   #include "io/ElectrostaticAtomTypesSectionParser.hpp"
27  
28 #include "types/AtomType.hpp"
29 #include "types/DirectionalAtomType.hpp"
28   #include "UseTheForce/ForceField.hpp"
29  
30   namespace oopse {
# Line 60 | Line 58 | void ElectrostaticAtomTypesSectionParser::parseLine(Fo
58          std::string atomTypeName = tokenizer.nextToken();    
59          int biggestRank = tokenizer.nextTokenAsInt();
60          nTokens -=  2;
63
64        if (nTokens < requiredTokens(biggestRank)) {
65
66        }
61          
62          AtomType* atomType = ff.getAtomType(atomTypeName);
63  
64          if (atomType != NULL) {
71            //parse charge
72            double charge = tokenizer.nextTokenAsDouble();
73            atomType->addProperty(new DoubleGenericData("Charge", charge));
74            atomType->setCharge();
65  
66 <            //parse dipole
66 >            
67 >            //parse charge
68 >            if (biggestRank >= 1) {
69 >                parseCharge(tokenizer, atomType);
70 >            }
71 >            
72              DirectionalAtomType* dAtomType = dynamic_cast<DirectionalAtomType*>(atomType);            
73              if (dAtomType != NULL) {
74 <                double dipole = tokenizer.nextTokenAsDouble();
80 <                dAtomType->addProperty(new DoubleGenericData("Dipole", dipole));
81 <                dAtomType->setDipole();
74 >
75              } else {
76                  std::cerr << "ElectrostaticAtomTypesSectionParser Warning:" << std::endl;
77              }
78  
79 <            //parse quadrupole
80 <            //QuadrupoleParam quadParam;
81 <            //double quadParam.Qxx = tokenizer.nextTokenAsDouble();
82 <            //double quadParam.Qyy = tokenizer.nextTokenAsDouble();            
83 <            //double quadParam.Qzz = tokenizer.nextTokenAsDouble();
84 <            //dAtomType->setQuadrupole()
85 <            //dAtomType->addProperty(new QuadrupoleParamGenericData("Quadrupole", quadParam));
79 >            switch (biggestRank) {
80 >                case 1 :
81 >                    parseCharge(tokenizer, atomType);
82 >                    break;
83 >
84 >               case 2 :
85 >                    parseCharge(tokenizer, dAtomType);
86 >                    parseDipole(tokenizer, dAtomType);
87 >                    parseElectroBodyFrame(tokenizer, dAtomType);
88 >                    break;
89 >
90 >               case 3:
91 >                    parseCharge(tokenizer, dAtomType);
92 >                    parseDipole(tokenizer, dAtomType);
93 >                    parseQuadruple(tokenizer, dAtomType);
94 >                    parseElectroBodyFrame(tokenizer, dAtomType);
95 >                    break;
96 >                    
97 >               default :
98 >                    break;
99 >
100 >            }
101              
102          } else {
103              std::cerr << "ElectrostaticAtomTypesSectionParser Error: Can not find matched AtomType " << atomTypeName
# Line 101 | Line 109 | void ElectrostaticAtomTypesSectionParser::parseLine(Fo
109  
110   }
111  
112 +
113 + void ElectrostaticAtomTypesSectionParser::parseCharge(StringTokenizer& tokenizer,
114 +    AtomType* atomType) {
115 +
116 +    double charge = tokenizer.nextTokenAsDouble();
117 +    atomType->addProperty(new DoubleGenericData("Charge", charge));
118 +    atomType->setCharge();
119 +    
120 + }
121 + void ElectrostaticAtomTypesSectionParser::parseDipole(StringTokenizer& tokenizer,
122 +    DirectionalAtomType* dAtomType) {
123 +
124 +    double Dipole = tokenizer.nextTokenAsDouble();
125 +    dAtomType->addProperty(new DoubleGenericData("Dipole", Dipole));
126 +    dAtomType->setDipole();
127 + }
128 +
129 + void ElectrostaticAtomTypesSectionParser::parseQuadruple(StringTokenizer& tokenizer,
130 +    DirectionalAtomType* dAtomType) {
131 +
132 +    Vector3d Q;
133 +    Q[0] = tokenizer.nextTokenAsDouble();
134 +    Q[1] = tokenizer.nextTokenAsDouble();
135 +    Q[2] = tokenizer.nextTokenAsDouble();
136 +    
137 +    dAtomType->addProperty(new Vector3dGenericData("Quadrupole", Q));
138 +    dAtomType->setQuadrupole();
139 + }
140 + void ElectrostaticAtomTypesSectionParser::parseElectroBodyFrame(StringTokenizer& tokenizer,
141 +    DirectionalAtomType* dAtomType) {
142 +
143 +    double phi;
144 +    double theta;
145 +    double psi;
146 +
147 +    if (tokenizer.countTokens() >=3 ) {
148 +        phi = tokenizer.nextTokenAsDouble()/180.0;
149 +        theta = tokenizer.nextTokenAsDouble()/180.0;
150 +        psi = tokenizer.nextTokenAsDouble()/180.0;
151 +    } else {
152 +        phi = 0.0;
153 +        theta = 0.0;
154 +        psi = 0.0;    
155 +    }
156 +    
157 +    RotMat3x3d electroBodyFrame(phi, theta, psi);
158 +    dAtomType->setElectroBodyFrame(electroBodyFrame);
159 +        
160 + }
161 +
162   } //end namespace oopse
163  
164  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines