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

Comparing trunk/OOPSE-4/src/types/DirectionalAtomType.cpp (file contents):
Revision 2093 by gezelter, Tue Mar 8 21:07:27 2005 UTC vs.
Revision 2094 by gezelter, Wed Mar 9 14:26:15 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 | void DirectionalAtomType::complete() {
45   #include "utils/simError.h"
46   namespace oopse {
47  
48 < void DirectionalAtomType::complete() {
48 >  void DirectionalAtomType::complete() {
49  
50      //
51      AtomType::complete();
# Line 85 | Line 85 | void DirectionalAtomType::complete() {
85          simError();          
86        }
87      }
88 +
89 +    if (isSplitDipole()) {
90 +      data = getPropertyByName("SplitDipoleDistance");
91 +      if (data != NULL) {
92 +        DoubleGenericData* doubleData= dynamic_cast<DoubleGenericData*>(data);
93 +        
94 +        if (doubleData != NULL) {
95 +          double splitDipoleDistance = doubleData->getData();
96 +          
97 +          setSplitDipoleDistance(&atp.ident, &splitDipoleDistance, &isError);
98 +          if (isError != 0) {
99 +            sprintf( painCave.errMsg,
100 +                     "Fortran rejected setSplitDipoleDistance\n");
101 +            painCave.severity = OOPSE_ERROR;
102 +            painCave.isFatal = 1;
103 +            simError();          
104 +          }
105 +          
106 +        } else {
107 +          sprintf( painCave.errMsg,
108 +                   "Can not cast GenericData to DoubleGenericData\n");
109 +          painCave.severity = OOPSE_ERROR;
110 +          painCave.isFatal = 1;
111 +          simError();          
112 +        }
113 +      } else {
114 +        sprintf( painCave.errMsg, "Can not find SplitDipole distance parameter\n");
115 +        painCave.severity = OOPSE_ERROR;
116 +        painCave.isFatal = 1;
117 +        simError();          
118 +      }
119 +    }
120      
121      //setup quadrupole atom type in fortran side
122      if (isQuadrupole()) {
123 <      data = getPropertyByName("Quadrupole");
123 >      data = getPropertyByName("QuadrupoleMoments");
124        if (data != NULL) {
125          Vector3dGenericData* vector3dData= dynamic_cast<Vector3dGenericData*>(data);
126      
127 <        // BROKEN:  cartesian quadrupoles have the following properties
128 <        //     They are symmetric and traceless:
129 <        //     Qxy = Qyx          Qxx + Qyy + Qzz = 0
130 <        //     Qxz = Qzx
131 <        //     Qyz = Qzy
127 >        // Quadrupoles in OOPSE are set as the diagonal elements
128 >        // of the diagonalized traceless quadrupole moment tensor.
129 >        // The column vectors of the unitary matrix that diagonalizes
130 >        // the quadrupole moment tensor become the eFrame (or the
131 >        // electrostatic version of the body-fixed frame.
132          
133          if (vector3dData != NULL) {
134            Vector3d diagElem= vector3dData->getData();
103          Mat3x3d Q;
104          Q(0, 0) = diagElem[0];
105          Q(1, 1) = diagElem[1];
106          Q(2, 2) = diagElem[2];
135            
136 <          setCartesianQuadrupole(&atp.ident, Q.getArrayPointer(), &isError);
136 >          setQuadrupoleMoments(&atp.ident, diagElem.getArrayPointer(),
137 >                               &isError);
138            if (isError != 0) {
139              sprintf( painCave.errMsg,
140 <                     "Fortran rejected setCartesianQuadrupole\n");
140 >                     "Fortran rejected setQuadrupoleMoments\n");
141              painCave.severity = OOPSE_ERROR;
142              painCave.isFatal = 1;
143              simError();          
# Line 122 | Line 151 | void DirectionalAtomType::complete() {
151            simError();          
152          }
153        } else {
154 <        sprintf( painCave.errMsg, "Can not find Quadrupole Parameters\n");
154 >        sprintf( painCave.errMsg, "Can not find QuadrupoleMoments\n");
155          painCave.severity = OOPSE_ERROR;
156          painCave.isFatal = 1;
157          simError();          
# Line 132 | Line 161 | void DirectionalAtomType::complete() {
161      
162      //setup sticky atom type in fortran side
163      if (isSticky()) {
164 <        data = getPropertyByName("Sticky");
165 <        if (data != NULL) {
166 <            StickyParamGenericData* stickyData = dynamic_cast<StickyParamGenericData*>(data);
164 >      data = getPropertyByName("Sticky");
165 >      if (data != NULL) {
166 >        StickyParamGenericData* stickyData = dynamic_cast<StickyParamGenericData*>(data);
167  
168 <            if (stickyData != NULL) {
169 <                StickyParam stickyParam = stickyData->getData();
168 >        if (stickyData != NULL) {
169 >          StickyParam stickyParam = stickyData->getData();
170  
171 <                /**@todo change fortran interface */
172 <                //makeStickyType(&atp.ident, &stickyParam.w0, &stickyParam.v0, &stickyParam.v0p, &stickyParam.rl,
173 <                //    &stickyParam.ru, &stickyParam.rlp, &stickyParam.rup);
174 <                newStickyType(&atp.ident,&stickyParam.w0, &stickyParam.v0, &stickyParam.v0p, &stickyParam.rl,
175 <                    &stickyParam.ru, &stickyParam.rlp, &stickyParam.rup, &isError);
176 <                if (isError != 0) {
177 <                    sprintf( painCave.errMsg,
178 <                           "Fortran rejected newLJtype\n");
150 <                    painCave.severity = OOPSE_ERROR;
151 <                    painCave.isFatal = 1;
152 <                    simError();          
153 <                }
154 <                
155 <            } else {
156 <                    sprintf( painCave.errMsg,
157 <                           "Can not cast GenericData to StickyParam\n");
158 <                    painCave.severity = OOPSE_ERROR;
159 <                    painCave.isFatal = 1;
160 <                    simError();          
161 <            }            
162 <        } else {
163 <            sprintf( painCave.errMsg, "Can not find Parameters for Sticky\n");
171 >          /**@todo change fortran interface */
172 >          //makeStickyType(&atp.ident, &stickyParam.w0, &stickyParam.v0, &stickyParam.v0p, &stickyParam.rl,
173 >          //    &stickyParam.ru, &stickyParam.rlp, &stickyParam.rup);
174 >          newStickyType(&atp.ident,&stickyParam.w0, &stickyParam.v0, &stickyParam.v0p, &stickyParam.rl,
175 >                        &stickyParam.ru, &stickyParam.rlp, &stickyParam.rup, &isError);
176 >          if (isError != 0) {
177 >            sprintf( painCave.errMsg,
178 >                     "Fortran rejected newLJtype\n");
179              painCave.severity = OOPSE_ERROR;
180              painCave.isFatal = 1;
181              simError();          
182 <        }
182 >          }
183 >                
184 >        } else {
185 >          sprintf( painCave.errMsg,
186 >                   "Can not cast GenericData to StickyParam\n");
187 >          painCave.severity = OOPSE_ERROR;
188 >          painCave.isFatal = 1;
189 >          simError();          
190 >        }            
191 >      } else {
192 >        sprintf( painCave.errMsg, "Can not find Parameters for Sticky\n");
193 >        painCave.severity = OOPSE_ERROR;
194 >        painCave.isFatal = 1;
195 >        simError();          
196 >      }
197      }
198  
199      //setup GayBerne type in fortran side
200  
201 < }
201 >  }
202  
203  
204   } //end namespace oopse

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines