# | Line 26 | Line 26 | SimInfo::SimInfo(){ | |
---|---|---|
26 | SimInfo::SimInfo(){ | |
27 | excludes = NULL; | |
28 | n_constraints = 0; | |
29 | + | nZconstraints = 0; |
30 | n_oriented = 0; | |
31 | n_dipoles = 0; | |
32 | ndf = 0; | |
33 | ndfRaw = 0; | |
34 | + | nZconstraints = 0; |
35 | the_integrator = NULL; | |
36 | setTemp = 0; | |
37 | thermalTime = 0.0; | |
38 | + | currentTime = 0.0; |
39 | rCut = 0.0; | |
40 | + | origRcut = -1.0; |
41 | ecr = 0.0; | |
42 | + | origEcr = -1.0; |
43 | est = 0.0; | |
44 | oldEcr = 0.0; | |
45 | oldRcut = 0.0; | |
# | Line 53 | Line 58 | SimInfo::SimInfo(){ | |
58 | useGB = 0; | |
59 | useEAM = 0; | |
60 | ||
61 | + | myConfiguration = new SimState(); |
62 | + | |
63 | wrapMeSimInfo( this ); | |
64 | + | } |
65 | + | |
66 | + | |
67 | + | SimInfo::~SimInfo(){ |
68 | + | |
69 | + | delete myConfiguration; |
70 | + | |
71 | + | map<string, GenericData*>::iterator i; |
72 | + | |
73 | + | for(i = properties.begin(); i != properties.end(); i++) |
74 | + | delete (*i).second; |
75 | + | |
76 | } | |
77 | ||
78 | void SimInfo::setBox(double newBox[3]) { | |
# | Line 291 | Line 310 | void SimInfo::calcBoxL( void ){ | |
310 | dsq = dx*dx + dy*dy + dz*dz; | |
311 | boxL[2] = sqrt( dsq ); | |
312 | if( (0.5 * boxL[2]) < maxCutoff ) maxCutoff = 0.5 * boxL[2]; | |
313 | + | |
314 | + | checkCutOffs(); |
315 | ||
316 | } | |
317 | ||
# | Line 345 | Line 366 | int SimInfo::getNDF(){ | |
366 | ndf = ndf_local; | |
367 | #endif | |
368 | ||
369 | < | ndf = ndf - 3; |
369 | > | ndf = ndf - 3 - nZconstraints; |
370 | ||
371 | return ndf; | |
372 | } | |
# | Line 364 | Line 385 | int SimInfo::getNDFraw() { | |
385 | ||
386 | return ndfRaw; | |
387 | } | |
388 | < | |
388 | > | |
389 | > | int SimInfo::getNDFtranslational() { |
390 | > | int ndfTrans_local, ndfTrans; |
391 | > | |
392 | > | ndfTrans_local = 3 * n_atoms - n_constraints; |
393 | > | |
394 | > | #ifdef IS_MPI |
395 | > | MPI_Allreduce(&ndfTrans_local,&ndfTrans,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD); |
396 | > | #else |
397 | > | ndfTrans = ndfTrans_local; |
398 | > | #endif |
399 | > | |
400 | > | ndfTrans = ndfTrans - 3 - nZconstraints; |
401 | > | |
402 | > | return ndfTrans; |
403 | > | } |
404 | > | |
405 | void SimInfo::refreshSim(){ | |
406 | ||
407 | simtype fInfo; | |
# | Line 420 | Line 457 | void SimInfo::refreshSim(){ | |
457 | ||
458 | this->ndf = this->getNDF(); | |
459 | this->ndfRaw = this->getNDFraw(); | |
460 | < | |
460 | > | this->ndfTrans = this->getNDFtranslational(); |
461 | } | |
462 | ||
463 | ||
# | Line 457 | Line 494 | void SimInfo::checkCutOffs( void ){ | |
494 | ||
495 | int cutChanged = 0; | |
496 | ||
497 | + | |
498 | + | |
499 | if( boxIsInit ){ | |
500 | ||
501 | //we need to check cutOffs against the box | |
502 | < | |
503 | < | if( maxCutoff > rCut ){ |
502 | > | |
503 | > | if(( maxCutoff > rCut )&&(usePBC)){ |
504 | if( rCut < origRcut ){ | |
505 | rCut = origRcut; | |
506 | if (rCut > maxCutoff) rCut = maxCutoff; | |
# | Line 477 | Line 516 | void SimInfo::checkCutOffs( void ){ | |
516 | ||
517 | if( maxCutoff > ecr ){ | |
518 | if( ecr < origEcr ){ | |
519 | < | rCut = origEcr; |
519 | > | ecr = origEcr; |
520 | if (ecr > maxCutoff) ecr = maxCutoff; | |
521 | ||
522 | sprintf( painCave.errMsg, | |
# | Line 490 | Line 529 | void SimInfo::checkCutOffs( void ){ | |
529 | } | |
530 | ||
531 | ||
532 | < | if (rCut > maxCutoff) { |
532 | > | if ((rCut > maxCutoff)&&(usePBC)) { |
533 | sprintf( painCave.errMsg, | |
534 | "New Box size is setting the long range cutoff radius " | |
535 | "to %lf\n", | |
# | Line 510 | Line 549 | void SimInfo::checkCutOffs( void ){ | |
549 | ecr = maxCutoff; | |
550 | } | |
551 | ||
552 | < | |
553 | < | } |
515 | < | |
552 | > | |
553 | > | if( (oldEcr != ecr) || ( oldRcut != rCut ) ) cutChanged = 1; |
554 | ||
555 | < | if( (oldEcr != ecr) || ( oldRcut != rCut ) ) cutChanged = 1; |
518 | < | |
519 | < | // rlist is the 1.0 plus max( rcut, ecr ) |
520 | < | |
521 | < | ( rCut > ecr )? rList = rCut + 1.0: rList = ecr + 1.0; |
522 | < | |
523 | < | if( cutChanged ){ |
555 | > | // rlist is the 1.0 plus max( rcut, ecr ) |
556 | ||
557 | < | notifyFortranCutOffs( &rCut, &rList, &ecr, &est ); |
557 | > | ( rCut > ecr )? rList = rCut + 1.0: rList = ecr + 1.0; |
558 | > | |
559 | > | if( cutChanged ){ |
560 | > | |
561 | > | notifyFortranCutOffs( &rCut, &rList, &ecr, &est ); |
562 | > | } |
563 | > | |
564 | > | oldEcr = ecr; |
565 | > | oldRcut = rCut; |
566 | > | |
567 | > | } else { |
568 | > | // initialize this stuff before using it, OK? |
569 | > | sprintf( painCave.errMsg, |
570 | > | "Trying to check cutoffs without a box. Be smarter.\n" ); |
571 | > | painCave.isFatal = 1; |
572 | > | simError(); |
573 | } | |
574 | ||
528 | – | oldEcr = ecr; |
529 | – | oldRcut = rCut; |
575 | } | |
576 | + | |
577 | + | void SimInfo::addProperty(GenericData* prop){ |
578 | + | |
579 | + | map<string, GenericData*>::iterator result; |
580 | + | result = properties.find(prop->getID()); |
581 | + | |
582 | + | //we can't simply use properties[prop->getID()] = prop, |
583 | + | //it will cause memory leak if we already contain a propery which has the same name of prop |
584 | + | |
585 | + | if(result != properties.end()){ |
586 | + | |
587 | + | delete (*result).second; |
588 | + | (*result).second = prop; |
589 | + | |
590 | + | } |
591 | + | else{ |
592 | + | |
593 | + | properties[prop->getID()] = prop; |
594 | + | |
595 | + | } |
596 | + | |
597 | + | } |
598 | + | |
599 | + | GenericData* SimInfo::getProperty(const string& propName){ |
600 | + | |
601 | + | map<string, GenericData*>::iterator result; |
602 | + | |
603 | + | //string lowerCaseName = (); |
604 | + | |
605 | + | result = properties.find(propName); |
606 | + | |
607 | + | if(result != properties.end()) |
608 | + | return (*result).second; |
609 | + | else |
610 | + | return NULL; |
611 | + | } |
612 | + | |
613 | + | vector<GenericData*> SimInfo::getProperties(){ |
614 | + | |
615 | + | vector<GenericData*> result; |
616 | + | map<string, GenericData*>::iterator i; |
617 | + | |
618 | + | for(i = properties.begin(); i != properties.end(); i++) |
619 | + | result.push_back((*i).second); |
620 | + | |
621 | + | return result; |
622 | + | } |
623 | + | |
624 | + | double SimInfo::matTrace3(double m[3][3]){ |
625 | + | double trace; |
626 | + | trace = m[0][0] + m[1][1] + m[2][2]; |
627 | + | |
628 | + | return trace; |
629 | + | } |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |