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 1770 by tim, Tue Nov 23 17:53:43 2004 UTC vs.
Revision 1813 by tim, Wed Dec 1 17:38:32 2004 UTC

# Line 25 | Line 25 | namespace oopse {
25  
26   #include "io/ElectrostaticAtomTypesSectionParser.hpp"
27  
28 + #include "types/AtomType.hpp"
29 + #include "types/DirectionalAtomType.hpp"
30 + #include "UseTheForce/ForceField.hpp"
31 +
32   namespace oopse {
33  
34   ElectrostaticAtomTypesSectionParser::ElectrostaticAtomTypesSectionParser() {
# Line 38 | Line 42 | void ElectrostaticAtomTypesSectionParser::parseLine(Fo
42      //in AtomTypeSection, a line at least contains 2 tokens
43      //atomTypeName and biggest rank
44      //for the time being, we only support up to quadrupole
45 <    //name 0 charge
46 <    //name 1 charge dipole_moment
47 <    //name 2 chargre dipole_moment Qxx Qyy Qzz
45 >    // "name" must match the name in the AtomTypes section
46 >    // charge is given in units of electrons (1.61 x 10^-19 C)
47 >    // Directionality for dipoles and quadrupoles must be given because the body-fixed
48 >    // reference frame for directional atoms is determined by the *mass* distribution and
49 >    // not by the charge distribution.  
50 >    // Dipoles are given in units of Debye  
51 >    // Quadrupoles are given in units of
52 >    // name 0 charge
53 >    // name 1 charge |u| [theta phi psi]
54 >    // name 2 charge |u| Qxx Qyy Qzz [theta phi psi]
55      
56      if (nTokens < 2)  {
57          std::cerr << "ElectrostaticAtomTypesSectionParser Error: Not enought Tokens at line " << lineNo << std::endl;                  
# Line 53 | Line 64 | void ElectrostaticAtomTypesSectionParser::parseLine(Fo
64          if (nTokens < requiredTokens(biggestRank)) {
65  
66          }
56
67          
68 <        AtomType* atomType = ff ->getAtomType(atomTypeName);
68 >        AtomType* atomType = ff.getAtomType(atomTypeName);
69  
70          if (atomType != NULL) {
71              //parse charge
62            double charge = tokenizer.nextTokenAsDouble();
63            atomType.addProperty(new DoubleGenericData("Charge", charge));
64            atomType->setCharge();
72  
73 +
74              //parse dipole
75              DirectionalAtomType* dAtomType = dynamic_cast<DirectionalAtomType*>(atomType);            
76              if (dAtomType != NULL) {
77 <                double dipole = tokenizer.nextToken();
70 <                dAtomType->addProperty(new DoubleGenericData("Dipole", dipole));
71 <                dAtomType->setDipole();
77 >
78              } else {
79                  std::cerr << "ElectrostaticAtomTypesSectionParser Warning:" << std::endl;
80              }
# Line 91 | Line 97 | void ElectrostaticAtomTypesSectionParser::parseLine(Fo
97  
98   }
99  
100 +
101 + void ElectrostaticAtomTypesSectionParser::parseCharge(StringTokenizer& tokenizer,
102 +    AtomType* atomType) {
103 +
104 +    double charge = tokenizer.nextTokenAsDouble();
105 +    atomType->addProperty(new DoubleGenericData("Charge", charge));
106 +    atomType->setCharge();
107 +    
108 + }
109 + void ElectrostaticAtomTypesSectionParser::parseDipole(StringTokenizer& tokenizer,
110 +    DirectionalAtomType* dAtomType) {
111 +
112 +    double Dipole = tokenizer.nextTokenAsDouble();
113 +    dAtomType->addProperty(new DoubleGenericData("Dipole", Dipole));
114 +    dAtomType->setDipole();
115 + }
116 +
117 + void ElectrostaticAtomTypesSectionParser::parseQuadruple(StringTokenizer& tokenizer,
118 +    DirectionalAtomType* dAtomType) {
119 +
120 +    Vector3d Q;
121 +    double Q[0] = tokenizer.nextTokenAsDouble();
122 +    double Q[1] = tokenizer.nextTokenAsDouble();
123 +    double Q[2] = tokenizer.nextTokenAsDouble();
124 +    
125 +    dAtomType->addProperty(new Vector3dGenericData("Quadrupole", Q));
126 +    dAtomType->setQuadrupole();
127 + }
128 + void ElectrostaticAtomTypesSectionParser::parseElectroBodyFrame(StringTokenizer& tokenizer,
129 +    DirectionalAtomType* dAtomType) {
130 +
131 +    double phi = tokenizer.nextTokenAsDouble();
132 +    double theta = tokenizer.nextTokenAsDouble();
133 +    double psi = tokenizer.nextTokenAsDouble();
134 +
135 +    RotMat3x3d electroBodyFrame(phi, theta, psi);
136 +    dAtomType->setElectroBodyFrame(electroBodyFrame);
137 +        
138 + }
139 +
140   } //end namespace oopse
141  
142  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines