# | Line 27 | Line 27 | Integrator::Integrator( SimInfo *theInfo, ForceFields* | |
---|---|---|
27 | ||
28 | nAtoms = info->n_atoms; | |
29 | ||
30 | + | std::cerr << "integ nAtoms = " << nAtoms << "\n"; |
31 | + | |
32 | // check for constraints | |
33 | ||
34 | constrainedA = NULL; | |
# | Line 72 | Line 74 | void Integrator::checkConstraints( void ){ | |
74 | for(int j=0; j<molecules[i].getNBonds(); j++){ | |
75 | ||
76 | constrained = theArray[j]->is_constrained(); | |
77 | + | |
78 | + | std::cerr << "Is the folowing bond constrained \n"; |
79 | + | theArray[j]->printMe(); |
80 | ||
81 | if(constrained){ | |
82 | ||
83 | + | std::cerr << "Yes\n"; |
84 | + | |
85 | dummy_plug = theArray[j]->get_constraint(); | |
86 | temp_con[nConstrained].set_a( dummy_plug->get_a() ); | |
87 | temp_con[nConstrained].set_b( dummy_plug->get_b() ); | |
# | Line 82 | Line 89 | void Integrator::checkConstraints( void ){ | |
89 | ||
90 | nConstrained++; | |
91 | constrained = 0; | |
92 | < | } |
92 | > | } |
93 | > | else std::cerr << "No.\n"; |
94 | } | |
95 | ||
96 | theArray = (SRI**) molecules[i].getMyBends(); | |
# | Line 216 | Line 224 | void Integrator::integrate( void ){ | |
224 | pos = Atom::getPosArray(); | |
225 | vel = Atom::getVelArray(); | |
226 | frc = Atom::getFrcArray(); | |
219 | – | trq = Atom::getTrqArray(); |
220 | – | Amat = Atom::getAmatArray(); |
227 | ||
228 | while( currTime < runTime ){ | |
229 | ||
# | Line 226 | Line 232 | void Integrator::integrate( void ){ | |
232 | calcStress = 1; | |
233 | } | |
234 | ||
235 | + | std::cerr << currTime << "\n"; |
236 | + | |
237 | integrateStep( calcPot, calcStress ); | |
238 | ||
239 | currTime += dt; | |
# | Line 271 | Line 279 | void Integrator::integrateStep( int calcPot, int calcS | |
279 | ||
280 | preMove(); | |
281 | moveA(); | |
282 | < | if( nConstrained ) constrainA(); |
282 | > | //if( nConstrained ) constrainA(); |
283 | ||
284 | // calc forces | |
285 | ||
# | Line 293 | Line 301 | void Integrator::moveA( void ){ | |
301 | double Tb[3]; | |
302 | double ji[3]; | |
303 | double angle; | |
304 | < | |
304 | > | double A[3][3], At[3][3]; |
305 | ||
306 | ||
307 | for( i=0; i<nAtoms; i++ ){ | |
# | Line 304 | Line 312 | void Integrator::moveA( void ){ | |
312 | for( j=atomIndex; j<(atomIndex+3); j++ ) | |
313 | vel[j] += ( dt2 * frc[j] / atoms[i]->getMass() ) * eConvert; | |
314 | ||
315 | + | |
316 | // position whole step | |
317 | for( j=atomIndex; j<(atomIndex+3); j++ ) pos[j] += dt * vel[j]; | |
318 | ||
319 | + | |
320 | if( atoms[i]->isDirectional() ){ | |
321 | ||
322 | dAtom = (DirectionalAtom *)atoms[i]; | |
# | Line 316 | Line 326 | void Integrator::moveA( void ){ | |
326 | Tb[0] = dAtom->getTx(); | |
327 | Tb[1] = dAtom->getTy(); | |
328 | Tb[2] = dAtom->getTz(); | |
329 | < | |
329 | > | |
330 | dAtom->lab2Body( Tb ); | |
331 | < | |
331 | > | |
332 | // get the angular momentum, and propagate a half step | |
333 | ||
334 | ji[0] = dAtom->getJx() + ( dt2 * Tb[0] ) * eConvert; | |
# | Line 331 | Line 341 | void Integrator::moveA( void ){ | |
341 | // rotate about the x-axis | |
342 | angle = dt2 * ji[0] / dAtom->getIxx(); | |
343 | this->rotate( 1, 2, angle, ji, &Amat[aMatIndex] ); | |
344 | < | |
344 | > | |
345 | // rotate about the y-axis | |
346 | angle = dt2 * ji[1] / dAtom->getIyy(); | |
347 | this->rotate( 2, 0, angle, ji, &Amat[aMatIndex] ); | |
# | Line 351 | Line 361 | void Integrator::moveA( void ){ | |
361 | dAtom->setJx( ji[0] ); | |
362 | dAtom->setJy( ji[1] ); | |
363 | dAtom->setJz( ji[2] ); | |
364 | + | |
365 | + | std::cerr << "Amat[" << i << "]\n"; |
366 | + | info->printMat9( &Amat[aMatIndex] ); |
367 | + | |
368 | + | std::cerr << "ji[" << i << "]\t" |
369 | + | << ji[0] << "\t" |
370 | + | << ji[1] << "\t" |
371 | + | << ji[2] << "\n"; |
372 | + | |
373 | } | |
374 | ||
375 | } | |
# | Line 359 | Line 378 | void Integrator::moveB( void ){ | |
378 | ||
379 | void Integrator::moveB( void ){ | |
380 | int i,j,k; | |
381 | < | int atomIndex; |
381 | > | int atomIndex, aMatIndex; |
382 | DirectionalAtom* dAtom; | |
383 | double Tb[3]; | |
384 | double ji[3]; | |
385 | ||
386 | for( i=0; i<nAtoms; i++ ){ | |
387 | atomIndex = i * 3; | |
388 | + | aMatIndex = i * 9; |
389 | ||
390 | // velocity half step | |
391 | for( j=atomIndex; j<(atomIndex+3); j++ ) | |
392 | vel[j] += ( dt2 * frc[j] / atoms[i]->getMass() ) * eConvert; | |
393 | ||
394 | + | |
395 | if( atoms[i]->isDirectional() ){ | |
396 | ||
397 | dAtom = (DirectionalAtom *)atoms[i]; | |
# | Line 381 | Line 402 | void Integrator::moveB( void ){ | |
402 | Tb[1] = dAtom->getTy(); | |
403 | Tb[2] = dAtom->getTz(); | |
404 | ||
405 | + | std::cerr << "TrqB[" << i << "]\t" |
406 | + | << Tb[0] << "\t" |
407 | + | << Tb[1] << "\t" |
408 | + | << Tb[2] << "\n"; |
409 | + | |
410 | dAtom->lab2Body( Tb ); | |
411 | ||
412 | // get the angular momentum, and complete the angular momentum | |
# | Line 393 | Line 419 | void Integrator::moveB( void ){ | |
419 | dAtom->setJx( ji[0] ); | |
420 | dAtom->setJy( ji[1] ); | |
421 | dAtom->setJz( ji[2] ); | |
422 | + | |
423 | + | |
424 | + | std::cerr << "Amat[" << i << "]\n"; |
425 | + | info->printMat9( &Amat[aMatIndex] ); |
426 | + | |
427 | + | std::cerr << "ji[" << i << "]\t" |
428 | + | << ji[0] << "\t" |
429 | + | << ji[1] << "\t" |
430 | + | << ji[2] << "\n"; |
431 | } | |
432 | } | |
433 | ||
# | Line 422 | Line 457 | void Integrator::constrainA(){ | |
457 | double gab; | |
458 | int iteration; | |
459 | ||
425 | – | |
426 | – | |
460 | for( i=0; i<nAtoms; i++){ | |
461 | ||
462 | moving[i] = 0; | |
# | Line 662 | Line 695 | void Integrator::rotate( int axes1, int axes2, double | |
695 | double tempA[3][3]; | |
696 | double tempJ[3]; | |
697 | ||
698 | + | |
699 | // initialize the tempA | |
700 | ||
701 | for(i=0; i<3; i++){ | |
702 | for(j=0; j<3; j++){ | |
703 | < | tempA[j][i] = A[3*i + j]; |
703 | > | tempA[j][i] = A[3*i+j]; |
704 | } | |
705 | } | |
706 | ||
# | Line 723 | Line 757 | void Integrator::rotate( int axes1, int axes2, double | |
757 | ||
758 | for(i=0; i<3; i++){ | |
759 | for(j=0; j<3; j++){ | |
760 | < | A[3*j + i] = 0.0; |
760 | > | A[3*j+i] = 0.0; |
761 | for(k=0; k<3; k++){ | |
762 | < | A[3*j + i] += tempA[i][k] * rot[j][k]; |
762 | > | A[3*j+i] += tempA[i][k] * rot[j][k]; |
763 | } | |
764 | } | |
765 | } |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |