43 |
|
if( rigidBodies != NULL ) { |
44 |
|
for( i=0; i<n_rigidbodies; i++ ) delete rigidBodies[i]; |
45 |
|
} |
46 |
+ |
delete[] rigidBodies; |
47 |
|
|
48 |
|
if( cutoffGroups != NULL ) { |
49 |
|
for( i=0; i<n_cutoffgroups; i++ ) delete cutoffGroups[i]; |
50 |
|
} |
51 |
+ |
delete[] cutoffGroups; |
52 |
|
|
53 |
|
if( atoms != NULL ){ |
54 |
|
for( i=0; i<n_atoms; i++ ) delete atoms[i]; |
55 |
|
} |
56 |
+ |
delete[] atoms; |
57 |
|
|
58 |
|
if( bonds != NULL ){ |
59 |
|
for( i=0; i<n_bonds; i++ ) delete bonds[i]; |
60 |
|
} |
61 |
+ |
delete[] bonds; |
62 |
|
|
63 |
|
if( bends != NULL ){ |
64 |
|
for( i=0; i<n_bends; i++ ) delete bends[i]; |
65 |
|
} |
66 |
+ |
delete[] bends; |
67 |
|
|
68 |
|
if( torsions != NULL ){ |
69 |
|
for( i=0; i<n_torsions; i++ ) delete torsions[i]; |
70 |
|
} |
71 |
+ |
delete[] torsions; |
72 |
|
|
73 |
+ |
|
74 |
+ |
|
75 |
+ |
|
76 |
|
} |
77 |
|
|
78 |
|
char* MoleculeStamp::assignString( char* lhs, char* rhs ){ |
454 |
|
|
455 |
|
return NULL; |
456 |
|
} |
457 |
+ |
|
458 |
+ |
|
459 |
+ |
//Function Name: isBondInSameRigidBody |
460 |
+ |
//Return true is both atoms of the bond belong to the same rigid body, otherwise return false |
461 |
+ |
bool MoleculeStamp::isBondInSameRigidBody(BondStamp* bond){ |
462 |
+ |
int rbA; |
463 |
+ |
int rbB; |
464 |
+ |
int consAtomA; |
465 |
+ |
int consAtomB; |
466 |
+ |
|
467 |
+ |
return isAtomInRigidBody(bond->getA(),rbA, consAtomA) && |
468 |
+ |
isAtomInRigidBody(bond->getB(),rbB, consAtomB); |
469 |
+ |
} |
470 |
+ |
|
471 |
+ |
|
472 |
+ |
// Function Name isAtomInRigidBody |
473 |
+ |
//return false if atom does not belong to a rigid body otherwise return true and set whichRigidBody |
474 |
+ |
//and consAtomIndex |
475 |
+ |
//atomIndex : the index of atom in component |
476 |
+ |
//whichRigidBody: the index of rigidbody in component |
477 |
+ |
//consAtomIndex: the position of joint atom apears in rigidbody's definition |
478 |
+ |
bool MoleculeStamp::isAtomInRigidBody(int atomIndex, int& whichRigidBody, int& consAtomIndex){ |
479 |
+ |
RigidBodyStamp* rbStamp; |
480 |
+ |
int numRb; |
481 |
+ |
int numAtom; |
482 |
+ |
|
483 |
+ |
numRb = this->getNRigidBodies(); |
484 |
+ |
|
485 |
+ |
for(int i = 0 ; i < numRb; i++){ |
486 |
+ |
rbStamp = this->getRigidBody(i); |
487 |
+ |
numAtom = rbStamp->getNMembers(); |
488 |
+ |
for(int j = 0; j < numAtom; j++) |
489 |
+ |
if (rbStamp->getMember(j) == atomIndex){ |
490 |
+ |
whichRigidBody = i; |
491 |
+ |
consAtomIndex = j; |
492 |
+ |
return true; |
493 |
+ |
} |
494 |
+ |
} |
495 |
+ |
|
496 |
+ |
return false; |
497 |
+ |
|
498 |
+ |
} |
499 |
+ |
|
500 |
+ |
//return the position of joint atom apears in rigidbody's definition |
501 |
+ |
//for the time being, we will use the most inefficient algorithm, the complexity is O(N2) |
502 |
+ |
//actually we could improve the complexity to O(NlgN) by sorting the atom index in rigid body first |
503 |
+ |
vector<pair<int, int> > MoleculeStamp::getJointAtoms(int rb1, int rb2){ |
504 |
+ |
RigidBodyStamp* rbStamp1; |
505 |
+ |
RigidBodyStamp* rbStamp2; |
506 |
+ |
int natomInRb1; |
507 |
+ |
int natomInRb2; |
508 |
+ |
int atomIndex1; |
509 |
+ |
int atomIndex2; |
510 |
+ |
vector<pair<int, int> > jointAtomIndexPair; |
511 |
+ |
|
512 |
+ |
rbStamp1 = this->getRigidBody(rb1); |
513 |
+ |
natomInRb1 =rbStamp1->getNMembers(); |
514 |
+ |
|
515 |
+ |
rbStamp2 = this->getRigidBody(rb2); |
516 |
+ |
natomInRb2 =rbStamp2->getNMembers(); |
517 |
+ |
|
518 |
+ |
for(int i = 0; i < natomInRb1; i++){ |
519 |
+ |
atomIndex1 = rbStamp1->getMember(i); |
520 |
+ |
|
521 |
+ |
for(int j= 0; j < natomInRb1; j++){ |
522 |
+ |
atomIndex2 = rbStamp2->getMember(j); |
523 |
+ |
|
524 |
+ |
if(atomIndex1 == atomIndex2){ |
525 |
+ |
jointAtomIndexPair.push_back(make_pair(i, j)); |
526 |
+ |
break; |
527 |
+ |
} |
528 |
+ |
|
529 |
+ |
}//end for(j =0) |
530 |
+ |
|
531 |
+ |
}//end for (i = 0) |
532 |
+ |
|
533 |
+ |
return jointAtomIndexPair; |
534 |
+ |
} |