--- trunk/OOPSE/libBASS/Globals.cpp 2003/03/24 21:55:34 394 +++ trunk/OOPSE/libBASS/Globals.cpp 2003/10/21 19:33:19 811 @@ -25,29 +25,41 @@ #define G_RUNTIME 6 //optional parameters -#define G_INITIALCONFIG 7 -#define G_FINALCONFIG 8 -#define G_NMOL 9 -#define G_DENSITY 10 -#define G_BOX 11 -#define G_BOXX 12 -#define G_BOXY 13 -#define G_BOXZ 14 -#define G_SAMPLETIME 15 -#define G_STATUSTIME 16 -#define G_ECR 17 -#define G_DIELECTRIC 18 -#define G_TEMPSET 19 -#define G_THERMALTIME 20 -#define G_USEPBC 21 -#define G_MIXINGRULE 22 -#define G_EST 23 -#define G_USERF 24 +#define G_INITIALCONFIG 7 +#define G_FINALCONFIG 8 +#define G_NMOL 9 +#define G_DENSITY 10 +#define G_BOX 11 +#define G_BOXX 12 +#define G_BOXY 13 +#define G_BOXZ 14 +#define G_SAMPLETIME 15 +#define G_STATUSTIME 16 +#define G_ECR 17 +#define G_DIELECTRIC 18 +#define G_TEMPSET 19 +#define G_THERMALTIME 20 +#define G_USEPBC 21 +#define G_MIXINGRULE 22 +#define G_EST 23 +#define G_USERF 24 +#define G_TARGETPRESSURE 25 +#define G_TAUTHERMOSTAT 26 +#define G_TAUBAROSTAT 27 +#define G_ZCONSTIME 28 +#define G_NZCONSTRAINTS 29 +#define G_ZCONSTOL 30 +#define G_ZCONSFORCEPOLICY 31 +#define G_SEED 32 +#define G_RESETTIME 33 +#define G_USEINITTIME 34 - Globals::Globals(){ int i; + + hash_size = 23; + hash_shift = 4; components = NULL; @@ -71,6 +83,7 @@ Globals::Globals(){ addHash( "boxY", G_BOXY ); addHash( "boxZ", G_BOXZ ); addHash( "sampleTime", G_SAMPLETIME ); + addHash( "resetTime", G_RESETTIME ); addHash( "statusTime", G_STATUSTIME ); addHash( "electrostaticCutoffRadius", G_ECR ); addHash( "dielectric", G_DIELECTRIC ); @@ -80,12 +93,23 @@ Globals::Globals(){ addHash( "usePeriodicBoundaryConditions", G_USEPBC); addHash( "electrostaticSkinThickness", G_EST ); addHash( "useReactionField", G_USERF ); - + addHash( "targetPressure", G_TARGETPRESSURE); + addHash( "tauThermostat", G_TAUTHERMOSTAT); + addHash( "tauBarostat", G_TAUBAROSTAT); + addHash( "zconsTime", G_ZCONSTIME); + addHash( "nZconstraints", G_NZCONSTRAINTS); + addHash( "zconsTol", G_ZCONSTOL); + addHash( "zconsForcePolicy", G_ZCONSFORCEPOLICY); + addHash( "seed", G_SEED); + addHash( "useInitTime", G_USEINITTIME), + + // define some default values strcpy( mixingRule,"standard"); //default mixing rules to standard. usePBC = 1; //default periodic boundry conditions to on useRF = 0; + useInitTime = 1; // default to pull init time from the init file have_force_field = 0; have_n_components = 0; @@ -105,13 +129,24 @@ Globals::Globals(){ have_box_z = 0; have_sample_time = 0; have_status_time = 0; + have_reset_time = 0; have_thermal_time = 0; have_ecr = 0; have_dielectric = 0; have_tempSet = 0; have_est = 0; - } + have_target_pressure =0; + have_q_mass = 0; + have_tau_thermostat = 0; + have_tau_barostat = 0; + have_zcons_time = 0; + have_n_zConstraints = 0; + have_zConstraints = 0; + have_zcons_tol = 0; + have_seed = 0; +} + Globals::~Globals(){ int i; @@ -184,16 +219,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; @@ -245,6 +343,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; @@ -615,7 +735,36 @@ int Globals::globalAssign( event* the_event ){ } break; - case G_THERMALTIME: + case G_RESETTIME: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. resetTime is not a double or int.\n" ); + return 0; + break; + + case DOUBLE: + resetTime = the_event->evt.asmt.rhs.dval; + have_reset_time = 1; + return 1; + break; + + case INT: + resetTime = (double)the_event->evt.asmt.rhs.ival; + have_reset_time = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. resetTime unrecognized.\n" ); + return 0; + break; + } + break; + + case G_THERMALTIME: switch( the_type ){ case STRING: @@ -734,8 +883,8 @@ int Globals::globalAssign( event* the_event ){ case G_TEMPSET: if( the_type == STRING ){ - if( !strcmp( "true", the_event->evt.asmt.rhs.sval )) tempSet = 1; - else if( !strcmp( "false", the_event->evt.asmt.rhs.sval )) tempSet = 0; + if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) tempSet = 1; + else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) tempSet = 0; else{ the_event->err_msg = strdup( "Global error. tempSet was not \"true\" or \"false\".\n" ); @@ -747,14 +896,32 @@ int Globals::globalAssign( event* the_event ){ the_event->err_msg = strdup( "Global error. tempSet was not \"true\" or \"false\".\n" ); + return 0; + break; + + case G_USEINITTIME: + if( the_type == STRING ){ + + if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useInitTime = 1; + else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useInitTime = 0; + else{ + the_event->err_msg = + strdup( "Global error. useInitTime was not \"true\" or \"false\".\n" ); + return 0; + } + return 1; + } + + the_event->err_msg = + strdup( "Global error. useInitTime was not \"true\" or \"false\".\n" ); return 0; break; case G_USEPBC: if( the_type == STRING ){ - if( !strcmp( "true", the_event->evt.asmt.rhs.sval )) usePBC = 1; - else if( !strcmp( "false", the_event->evt.asmt.rhs.sval )) usePBC = 0; + if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) usePBC = 1; + else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) usePBC = 0; else{ the_event->err_msg = strdup( "Global error. usePeriodicBoundaryConditions was not \"true\" or \"false\".\n" ); @@ -771,8 +938,8 @@ int Globals::globalAssign( event* the_event ){ case G_USERF: if( the_type == STRING ){ - if( !strcmp( "true", the_event->evt.asmt.rhs.sval )) useRF = 1; - else if( !strcmp( "false", the_event->evt.asmt.rhs.sval )) useRF = 0; + if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useRF = 1; + else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useRF = 0; else{ the_event->err_msg = strdup( "Global error. useReactionField was not \"true\" or \"false\".\n" ); @@ -784,9 +951,218 @@ int Globals::globalAssign( event* the_event ){ the_event->err_msg = strdup( "Global error. useReactionField was not \"true\" or \"false\".\n" ); return 0; + break; + + case G_TARGETPRESSURE: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. targetPressure is not a double or int.\n" ); + return 0; + break; + + case DOUBLE: + target_pressure = the_event->evt.asmt.rhs.dval; + have_target_pressure = 1; + return 1; + break; + + case INT: + target_pressure = (double)the_event->evt.asmt.rhs.ival; + have_target_pressure = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. targetPressure unrecognized.\n" ); + return 0; + break; + } + break; + + case G_TAUTHERMOSTAT: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. tauThermostat is not a double or int.\n" ); + return 0; + break; + + case DOUBLE: + tau_thermostat = the_event->evt.asmt.rhs.dval; + have_tau_thermostat = 1; + return 1; + break; + + case INT: + tau_thermostat = (double)the_event->evt.asmt.rhs.ival; + have_tau_thermostat = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. tauThermostat unrecognized.\n" ); + return 0; + break; + } + break; + + case G_TAUBAROSTAT: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. tauBarostat is not a double or int.\n" ); + return 0; + break; + + case DOUBLE: + tau_barostat = the_event->evt.asmt.rhs.dval; + have_tau_barostat = 1; + return 1; + break; + + case INT: + tau_barostat = (double)the_event->evt.asmt.rhs.ival; + have_tau_barostat = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. tauBarostat unrecognized.\n" ); + return 0; + break; + } + break; + + case G_ZCONSTIME: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. zcons_time is not a double or int.\n" ); + return 0; + break; + + case DOUBLE: + zcons_time = the_event->evt.asmt.rhs.dval; + have_zcons_time = 1; + return 1; + break; + + case INT: + zcons_time = (double)the_event->evt.asmt.rhs.ival; + have_zcons_time = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. zcons_time unrecognized.\n" ); + return 0; + break; + } break; + case G_ZCONSTOL: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. zcons_tol is not a double or int.\n" ); + return 0; + break; + + case DOUBLE: + zcons_tol = the_event->evt.asmt.rhs.dval; + have_zcons_tol = 1; + return 1; + break; + + case INT: + zcons_tol = (double)the_event->evt.asmt.rhs.ival; + have_zcons_tol = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. zcons_ol unrecognized.\n" ); + return 0; + break; + } + break; + + case G_ZCONSFORCEPOLICY: + switch( the_type ){ + + case STRING: + strcpy(zconsForcePolicy, the_event->evt.asmt.rhs.sval); + for(int i = 0; zconsForcePolicy[i] != '\0'; i++) + { + zconsForcePolicy[i] = toupper(zconsForcePolicy[i]); + } + have_zcons_force_policy = 1; + return 1; + break; + + case DOUBLE: + the_event->err_msg = + strdup( "Global error. zconsForcePolicy is not a double or int.\n" ); + return 0; + break; + + case INT: + the_event->err_msg = + strdup( "Global error. zconsForcePolicy is not a double or int.\n" ); + return 0; + break; + + default: + the_event->err_msg = + strdup( "Global error. zconsForcePolicy unrecognized.\n" ); + return 0; + break; + } + break; + // add more token cases here. + case G_SEED: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. seed is not a string.\n" ); + return 0; + return 0; + break; + + case DOUBLE: + have_seed = 1; + seed = (int)the_event->evt.asmt.rhs.dval; + return 1; + break; + + case INT: + have_seed = 1; + seed = the_event->evt.asmt.rhs.ival ; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. seed unrecognized.\n" ); + return 0; + break; + } + break; + // add more token cases here. + } }