--- trunk/OOPSE/libBASS/MakeStamps.cpp 2003/09/05 21:28:52 747 +++ trunk/OOPSE/libBASS/MakeStamps.cpp 2004/01/29 23:01:17 998 @@ -1,8 +1,10 @@ -#include -#include +#include +#include +#include #include "MakeStamps.hpp" #include "MoleculeStamp.hpp" +#include "RigidBodyStamp.hpp" #include "simError.h" #ifdef IS_MPI #include "mpiBASS.h" @@ -208,6 +210,81 @@ int MakeStamps::moleculeEnd( event* the_event ){ if( the_event->err_msg != NULL ) return 0; addMolStamp( current_mol ); + return 1; +} + +int MakeStamps::newRigidBody( event* the_event ){ + + current_rigidbody = new RigidBodyStamp; + + the_event->err_msg = current_mol->addRigidBody( current_rigidbody, + the_event->evt.blk_index ); + if( the_event->err_msg != NULL ) return 0; + return 1; +} + +int MakeStamps::rigidBodyAssign( event* the_event ){ + + switch( the_event->evt.asmt.asmt_type ){ + + case STRING: + the_event->err_msg = + current_rigidbody->assignString( the_event->evt.asmt.lhs, + the_event->evt.asmt.rhs.sval ); + if( the_event->err_msg != NULL ) return 0; + return 1; + break; + + case DOUBLE: + the_event->err_msg = + current_rigidbody->assignDouble( the_event->evt.asmt.lhs, + the_event->evt.asmt.rhs.dval ); + if( the_event->err_msg != NULL ) return 0; + return 1; + break; + + case INT: + the_event->err_msg = + current_rigidbody->assignInt( the_event->evt.asmt.lhs, + the_event->evt.asmt.rhs.ival ); + if( the_event->err_msg != NULL ) return 0; + return 1; + break; + + default: + the_event->err_msg = strdup( "MakeStamp error. Invalid rigidBody" + " assignment type" ); + return 0; + break; + } + return 0; +} + +int MakeStamps::rigidBodyMembers( event* the_event ){ + + int i; + + if( the_event->evt.mbrs.nMembers > 0 ){ + + for (i = 0; i < the_event->evt.mbrs.nMembers; i++) { + current_rigidbody->addMember( the_event->evt.mbrs.memberList[i]); + } + + return 1; + + } else { + the_event->err_msg = strdup( "MakeStamp error. No members in memberList " + " for this rigidBody."); + return 0; + + } +} + +int MakeStamps::rigidBodyEnd( event* the_event ){ + + the_event->err_msg = current_rigidbody->checkMe(); + if( the_event->err_msg != NULL ) return 0; + return 1; } @@ -217,6 +294,7 @@ int MakeStamps::newAtom( event* the_event ){ the_event->err_msg = current_mol->addAtom( current_atom, the_event->evt.blk_index ); + if( the_event->err_msg != NULL ) return 0; return 1; } @@ -232,9 +310,9 @@ int MakeStamps::atomOrientation( event* the_event ){ int MakeStamps::atomOrientation( event* the_event ){ - current_atom->setOrientation( the_event->evt.ornt.x, - the_event->evt.ornt.y, - the_event->evt.ornt.z ); + current_atom->setOrientation( the_event->evt.ornt.phi, + the_event->evt.ornt.theta, + the_event->evt.ornt.psi ); return 1; } @@ -325,11 +403,21 @@ int MakeStamps::bondMember( event* the_event ){ return 0; } -int MakeStamps::bondMember( event* the_event ){ +int MakeStamps::bondMembers( event* the_event ){ + + if( the_event->evt.mbrs.nMembers == 2 ){ + + current_bond->members( the_event->evt.mbrs.memberList[0], + the_event->evt.mbrs.memberList[1] ); + return 1; - current_bond->members( the_event->evt.mbr.a, - the_event->evt.mbr.b ); - return 1; + } else { + the_event->err_msg = strdup( "MakeStamp error. Wrong number of members " + " in bond"); + return 0; + + } + } int MakeStamps::bondConstraint( event* the_event ){ @@ -388,12 +476,29 @@ int MakeStamps::bendMember( event* the_event ){ return 0; } -int MakeStamps::bendMember( event* the_event ){ +int MakeStamps::bendMembers( event* the_event ){ - current_bend->members( the_event->evt.mbr.a, - the_event->evt.mbr.b, - the_event->evt.mbr.c ); - return 1; + + switch( the_event->evt.mbrs.nMembers ) { + case 3: + current_bend->members( the_event->evt.mbrs.memberList[0], + the_event->evt.mbrs.memberList[1], + the_event->evt.mbrs.memberList[2]); + return 1; + break; + case 2: + current_bend->members( the_event->evt.mbrs.memberList[0], + the_event->evt.mbrs.memberList[1], + 0 ); + return 1; + break; + default: + the_event->err_msg = strdup( "MakeStamp error. Wrong number of members " + "in bend."); + return 0; + break; + } + return 0; } int MakeStamps::bendConstraint( event* the_event ){ @@ -452,13 +557,22 @@ int MakeStamps::torsionMember( event* the_event ){ return 0; } -int MakeStamps::torsionMember( event* the_event ){ +int MakeStamps::torsionMembers( event* the_event ){ - current_torsion->members( the_event->evt.mbr.a, - the_event->evt.mbr.b, - the_event->evt.mbr.c, - the_event->evt.mbr.d ); - return 1; + if( the_event->evt.mbrs.nMembers == 4 ){ + + current_torsion->members( the_event->evt.mbrs.memberList[0], + the_event->evt.mbrs.memberList[1], + the_event->evt.mbrs.memberList[2], + the_event->evt.mbrs.memberList[3]); + return 1; + + } else { + the_event->err_msg = strdup( "MakeStamp error. Wrong number of members " + " in torsion"); + return 0; + + } } int MakeStamps::torsionConstraint( event* the_event ){