--- trunk/OOPSE/libBASS/Globals.cpp 2003/07/31 15:38:08 659 +++ trunk/OOPSE/libBASS/Globals.cpp 2003/08/11 19:38:44 675 @@ -47,7 +47,7 @@ #define G_TAUTHERMOSTAT 26 #define G_TAUBAROSTAT 27 #define G_ZCONSTIME 28 -#define G_ZCONSMOLINDEX 29 +#define G_NZCONSTRAINTS 29 Globals::Globals(){ @@ -88,8 +88,9 @@ Globals::Globals(){ addHash( "targetPressure", G_TARGETPRESSURE); addHash( "tauThermostat", G_TAUTHERMOSTAT); addHash( "tauBarostat", G_TAUBAROSTAT); - addHash( "zconsTime", G_ZCONSTIME); - addHash( "zconsMolIndex", G_ZCONSMOLINDEX); + addHash( "zconsTime", G_ZCONSTIME); + addHash( "nZconstraints", G_NZCONSTRAINTS); + // define some default values strcpy( mixingRule,"standard"); //default mixing rules to standard. @@ -122,9 +123,10 @@ Globals::Globals(){ have_target_pressure =0; have_q_mass = 0; have_tau_thermostat = 0; - have_tau_barostat = 0; - have_zcons_time = 0; - have_index_of_all_zcons_mols = 0; + have_tau_barostat = 0; + have_zcon_time = 0; + have_n_zConstraints = 0; + have_zConstraints = 0; } Globals::~Globals(){ @@ -199,16 +201,79 @@ int Globals::componentStartIndex( event* the_event ){ return 0; } -int Globals::componentStartIndex( event* the_event ){ +int Globals::componentEnd( event* the_event ){ - current_component->startIndex( the_event->evt.si.array, - the_event->evt.si.n_elements ); + the_event->err_msg = current_component->checkMe(); + if( the_event->err_msg != NULL ) return 0; + return 1; } -int Globals::componentEnd( event* the_event ){ +int Globals::newZconstraint( event* the_event ){ + - the_event->err_msg = current_component->checkMe(); + int index = the_event->evt.blk_index; + char err[200]; + current_zConstraint = new ZconStamp( index ); + + have_zConstraints = 1; + + if( have_n_zConstraints && index < n_zConstraints ) + zConstraints[index] = current_zConstraint; + else{ + if( have_n_zConstraints ){ + sprintf( err, "Globals error, %d out of nZconstraints range", + index ); + the_event->err_msg = strdup( err ); + return 0; + } + else{ + the_event->err_msg = strdup("Globals error, nZconstraints" + " not given before" + " first zConstraint declaration." ); + return 0; + } + } + + return 1; +} + + + +int Globals::zConstraintAssign( event* the_event ){ + + switch( the_event->evt.asmt.asmt_type ){ + + case STRING: + return current_zConstraint->assignString( the_event->evt.asmt.lhs, + the_event->evt.asmt.rhs.sval, + &(the_event->err_msg)); + break; + + case DOUBLE: + return current_zConstraint->assignDouble( the_event->evt.asmt.lhs, + the_event->evt.asmt.rhs.dval, + &(the_event->err_msg)); + break; + + case INT: + return current_zConstraint->assignInt( the_event->evt.asmt.lhs, + the_event->evt.asmt.rhs.ival, + &(the_event->err_msg)); + break; + + default: + the_event->err_msg = strdup( "Globals error. Invalid zConstraint" + " assignment type" ); + return 0; + break; + } + return 0; +} + +int Globals::zConstraintEnd( event* the_event ){ + + the_event->err_msg = current_zConstraint->checkMe(); if( the_event->err_msg != NULL ) return 0; return 1; @@ -260,6 +325,28 @@ int Globals::globalAssign( event* the_event ){ n_components = the_event->evt.asmt.rhs.ival; components = new Component*[n_components]; have_n_components = 1; + return 1; + } + break; + + case G_NZCONSTRAINTS: + if( the_type == STRING ){ + the_event->err_msg = + strdup("Global error. nZconstraints is not a double or an int.\n" ); + return 0; + } + + else if( the_type == DOUBLE ){ + n_zConstraints = (int)the_event->evt.asmt.rhs.dval; + zConstraints = new ZconStamp*[n_zConstraints]; + have_n_zConstraints = 1; + return 1; + } + + else{ + n_zConstraints = the_event->evt.asmt.rhs.ival; + zConstraints = new ZconStamp*[n_zConstraints]; + have_n_zConstraints = 1; return 1; } break; @@ -904,7 +991,7 @@ int Globals::globalAssign( event* the_event ){ case INT: zcons_time = (double)the_event->evt.asmt.rhs.ival; - have_zcons_time = 1; + have_zcon_time = 1; return 1; break; @@ -916,28 +1003,6 @@ int Globals::globalAssign( event* the_event ){ } break; - case G_ZCONSMOLINDEX: - switch( the_type ){ - - case STRING: - the_event->err_msg = - strdup( "Global error. zconsMolIndex is not a int.\n" ); - return 0; - break; - - case INT: - zconsMolIndex.push_back(the_event->evt.asmt.rhs.ival); - have_index_of_all_zcons_mols = 1; - return 1; - break; - - default: - the_event->err_msg = - strdup( "Global error. zconsMolIndex unrecognized.\n" ); - return 0; - break; - } - break; // add more token cases here.