Changes in src/atom.cpp [d3dfe18:49f802c]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/atom.cpp
-
Property mode
changed from
100644
to100755
rd3dfe18 r49f802c 6 6 7 7 #include "atom.hpp" 8 #include "bond.hpp" 9 #include "element.hpp" 8 10 #include "memoryallocator.hpp" 11 #include "vector.hpp" 9 12 10 13 /************************************* Functions for class atom *************************************/ … … 62 65 atom::~atom() 63 66 { 64 Free(&ComponentNr); 67 Free<int>(&ComponentNr, "atom::~atom: *ComponentNr"); 68 Free<char>(&Name, "atom::~atom: *Name"); 69 Trajectory.R.clear(); 70 Trajectory.U.clear(); 71 Trajectory.F.clear(); 65 72 }; 66 73 … … 80 87 }; 81 88 89 /** Sets father to itself or its father in case of copying a molecule. 90 */ 91 void atom::CorrectFather() 92 { 93 if (father->father == father) // same atom in copy's father points to itself 94 father = this; // set father to itself (copy of a whole molecule) 95 else 96 father = father->father; // set father to original's father 97 98 }; 99 100 /** Check whether father is equal to given atom. 101 * \param *ptr atom to compare father to 102 * \param **res return value (only set if atom::father is equal to \a *ptr) 103 */ 104 void atom::EqualsFather ( atom *ptr, atom **res ) 105 { 106 if ( ptr == father ) 107 *res = this; 108 }; 109 110 /** Checks whether atom is within the given box. 111 * \param offset offset to box origin 112 * \param *parallelepiped box matrix 113 * \return true - is inside, false - is not 114 */ 115 bool atom::IsInParallelepiped(Vector offset, double *parallelepiped) 116 { 117 return (node->IsInParallelepiped(offset, parallelepiped)); 118 }; 119 82 120 /** Output of a single atom. 83 121 * \param ElementNo cardinal number of the element … … 85 123 * \param *out stream to output to 86 124 * \param *comment commentary after '#' sign 87 */ 88 bool atom::Output(int ElementNo, int AtomNo, ofstream *out, const char *comment) const 125 * \return true - \a *out present, false - \a *out is NULL 126 */ 127 bool atom::Output(ofstream *out, int ElementNo, int AtomNo, const char *comment) const 89 128 { 90 129 if (out != NULL) { … … 102 141 return false; 103 142 }; 143 bool atom::Output(ofstream *out, int *ElementNo, int *AtomNo, const char *comment) 144 { 145 AtomNo[type->Z]++; // increment number 146 if (out != NULL) { 147 *out << "Ion_Type" << ElementNo[type->Z] << "_" << AtomNo[type->Z] << "\t" << fixed << setprecision(9) << showpoint; 148 *out << x.x[0] << "\t" << x.x[1] << "\t" << x.x[2]; 149 *out << "\t" << FixedIon; 150 if (v.Norm() > MYEPSILON) 151 *out << "\t" << scientific << setprecision(6) << v.x[0] << "\t" << v.x[1] << "\t" << v.x[2] << "\t"; 152 if (comment != NULL) 153 *out << " # " << comment << endl; 154 else 155 *out << " # molecule nr " << nr << endl; 156 return true; 157 } else 158 return false; 159 }; 104 160 105 161 /** Output of a single atom as one lin in xyz file. 106 162 * \param *out stream to output to 163 * \return true - \a *out present, false - \a *out is NULL 107 164 */ 108 165 bool atom::OutputXYZLine(ofstream *out) const … … 110 167 if (out != NULL) { 111 168 *out << type->symbol << "\t" << x.x[0] << "\t" << x.x[1] << "\t" << x.x[2] << "\t" << endl; 169 return true; 170 } else 171 return false; 172 }; 173 174 /** Output of a single atom as one lin in xyz file. 175 * \param *out stream to output to 176 * \param *ElementNo array with ion type number in the config file this atom's element shall have 177 * \param *AtomNo array with atom number in the config file this atom shall have, is increase by one automatically 178 * \param step Trajectory time step to output 179 * \return true - \a *out present, false - \a *out is NULL 180 */ 181 bool atom::OutputTrajectory(ofstream *out, int *ElementNo, int *AtomNo, int step) const 182 { 183 AtomNo[type->Z]++; 184 if (out != NULL) { 185 *out << "Ion_Type" << ElementNo[type->Z] << "_" << AtomNo[type->Z] << "\t" << fixed << setprecision(9) << showpoint; 186 *out << Trajectory.R.at(step).x[0] << "\t" << Trajectory.R.at(step).x[1] << "\t" << Trajectory.R.at(step).x[2]; 187 *out << "\t" << FixedIon; 188 if (Trajectory.U.at(step).Norm() > MYEPSILON) 189 *out << "\t" << scientific << setprecision(6) << Trajectory.U.at(step).x[0] << "\t" << Trajectory.U.at(step).x[1] << "\t" << Trajectory.U.at(step).x[2] << "\t"; 190 if (Trajectory.F.at(step).Norm() > MYEPSILON) 191 *out << "\t" << scientific << setprecision(6) << Trajectory.F.at(step).x[0] << "\t" << Trajectory.F.at(step).x[1] << "\t" << Trajectory.F.at(step).x[2] << "\t"; 192 *out << "\t# Number in molecule " << nr << endl; 193 return true; 194 } else 195 return false; 196 }; 197 198 /** Output of a single atom as one lin in xyz file. 199 * \param *out stream to output to 200 * \param step Trajectory time step to output 201 * \return true - \a *out present, false - \a *out is NULL 202 */ 203 bool atom::OutputTrajectoryXYZ(ofstream *out, int step) const 204 { 205 if (out != NULL) { 206 *out << type->symbol << "\t"; 207 *out << Trajectory.R.at(step).x[0] << "\t"; 208 *out << Trajectory.R.at(step).x[1] << "\t"; 209 *out << Trajectory.R.at(step).x[2] << endl; 210 return true; 211 } else 212 return false; 213 }; 214 215 /** Prints all bonds of this atom from given global lists. 216 * \param *out stream to output to 217 * \param *NumberOfBondsPerAtom array with number of bonds per atomic index 218 * \param ***ListOfBondsPerAtom array per atomic index of array with pointer to bond 219 * \return true - \a *out present, false - \a *out is NULL 220 */ 221 bool atom::OutputBondOfAtom(ofstream *out, int *NumberOfBondsPerAtom, bond ***ListOfBondsPerAtom) const 222 { 223 if (out != NULL) { 224 #ifdef ADDHYDROGEN 225 if (type->Z != 1) { // regard only non-hydrogen 226 #endif 227 *out << Verbose(4) << "Atom " << Name << "/" << nr << " with " << NumberOfBondsPerAtom[nr] << " bonds: "; 228 int TotalDegree = 0; 229 for (int j=0;j<NumberOfBondsPerAtom[nr];j++) { 230 *out << *ListOfBondsPerAtom[nr][j] << "\t"; 231 TotalDegree += ListOfBondsPerAtom[nr][j]->BondDegree; 232 } 233 *out << " -- TotalDegree: " << TotalDegree << endl; 234 #ifdef ADDHYDROGEN 235 } 236 #endif 112 237 return true; 113 238 } else … … 139 264 }; 140 265 266 /** Returns squared distance to a given vector. 267 * \param origin vector to calculate distance to 268 * \return distance squared 269 */ 270 double atom::DistanceSquaredToVector(Vector &origin) 271 { 272 return origin.DistanceSquared(&x); 273 }; 274 275 /** Adds kinetic energy of this atom to given temperature value. 276 * \param *temperature add on this value 277 * \param step given step of trajectory to add 278 */ 279 void atom::AddKineticToTemperature(double *temperature, int step) const 280 { 281 for (int i=NDIM;i--;) 282 *temperature += type->mass * Trajectory.U.at(step).x[i]* Trajectory.U.at(step).x[i]; 283 }; 284 285 /** Returns distance to a given vector. 286 * \param origin vector to calculate distance to 287 * \return distance 288 */ 289 double atom::DistanceToVector(Vector &origin) 290 { 291 return origin.Distance(&x); 292 }; 293 141 294 bool operator < (atom &a, atom &b) 142 295 { -
Property mode
changed from
Note:
See TracChangeset
for help on using the changeset viewer.