--- trunk/OOPSE/libBASS/Globals.cpp 2003/08/12 17:51:33 682 +++ trunk/OOPSE/libBASS/Globals.cpp 2004/04/28 21:39:12 1137 @@ -1,6 +1,6 @@ -#include -#include -#include +#include +#include +#include #include "Globals.hpp" #include "simError.h" @@ -17,42 +17,64 @@ */ //required parameters -#define G_FORCEFIELD 1 -#define G_NCOMPONENTS 2 -#define G_TARGETTEMP 3 -#define G_ENSEMBLE 4 -#define G_DT 5 -#define G_RUNTIME 6 +#define G_FORCEFIELD 1 +#define G_NCOMPONENTS 2 +#define G_TARGETTEMP 3 +#define G_ENSEMBLE 4 +#define G_DT 5 +#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_TARGETPRESSURE 25 -#define G_TAUTHERMOSTAT 26 -#define G_TAUBAROSTAT 27 -#define G_ZCONSTIME 28 -#define G_NZCONSTRAINTS 29 -#define G_ZCONSTOL 30 +#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 +#define G_USEINIT_XS_STATE 35 +#define G_ORTHOBOXTOLERANCE 36 +#define G_LJRCUT 37 +#define G_MINIMIZER 38 +#define G_MIN_MAXITER 39 +#define G_MIN_WRITEFRQ 40 +#define G_MIN_STEPSIZE 41 +#define G_MIN_FTOL 42 +#define G_MIN_GTOL 43 +#define G_MIN_LSTOL 44 +#define G_MIN_LSMAXITER 45 +#define G_ZCONSGAP 46 +#define G_ZCONSFIXTIME 47 +#define G_ZCONSUSINGSMD 48 +#define G_USEMOLECULARCUTOFFS 49 Globals::Globals(){ int i; + + hash_size = 23; + hash_shift = 4; components = NULL; @@ -76,6 +98,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 ); @@ -90,14 +113,34 @@ Globals::Globals(){ addHash( "tauBarostat", G_TAUBAROSTAT); addHash( "zconsTime", G_ZCONSTIME); addHash( "nZconstraints", G_NZCONSTRAINTS); - addHash( "zconsTol", G_ZCONSTOL); - - // define some default values + addHash( "zconsTol", G_ZCONSTOL); + addHash( "zconsForcePolicy", G_ZCONSFORCEPOLICY); + addHash( "seed", G_SEED); + addHash( "useInitialTime", G_USEINITTIME); + addHash( "useInitialExtendedSystemState", G_USEINIT_XS_STATE); + addHash( "orthoBoxTolerance", G_ORTHOBOXTOLERANCE); + addHash( "LJrcut", G_LJRCUT); + addHash( "minimizer", G_MINIMIZER); + addHash( "minMaxIter", G_MIN_MAXITER); + addHash( "minWriteFrq", G_MIN_WRITEFRQ); + addHash( "minStepSize", G_MIN_STEPSIZE); + addHash( "minFTol", G_MIN_FTOL); + addHash( "minGTol", G_MIN_GTOL); + addHash( "minLSTol", G_MIN_LSTOL); + addHash( "minLSMaxIter", G_MIN_LSMAXITER); + addHash( "zconsGap", G_ZCONSGAP); + addHash( "zconsFixtime", G_ZCONSFIXTIME); + addHash( "zconsUsingSMD", G_ZCONSUSINGSMD); + addHash( "useMolecularCutoffs", G_USEMOLECULARCUTOFFS); strcpy( mixingRule,"standard"); //default mixing rules to standard. usePBC = 1; //default periodic boundry conditions to on useRF = 0; - + useMolecularCutoffs = 0; + useInitTime = 0; // default to pull init time from the init file + useInitXSstate = 0; // default to pull the extended state from the init file + orthoBoxTolerance = 1E-6; + have_force_field = 0; have_n_components = 0; have_target_temp = 0; @@ -116,6 +159,7 @@ 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; @@ -129,8 +173,23 @@ Globals::Globals(){ have_n_zConstraints = 0; have_zConstraints = 0; have_zcons_tol = 0; - } + have_zcons_gap = 0; + have_zcons_fixtime = 0; + have_zcons_using_smd = 0; + have_seed = 0; + have_ljrcut = 0; + have_minimizer = 0; + have_minimizer_maxiteration = 0; + have_minimizer_writefrq = 0; + have_minimizer_stepsize = 0; + have_minimizer_ftol = 0; + have_minimizer_gtol = 0; + have_minimizer_ls_tol = 0; + have_minimizer_ls_maxiteration = 0; + have_use_molecular_cutoffs = 0; +} + Globals::~Globals(){ int i; @@ -248,20 +307,20 @@ int Globals::zConstraintAssign( event* the_event ){ case STRING: return current_zConstraint->assignString( the_event->evt.asmt.lhs, - the_event->evt.asmt.rhs.sval, - &(the_event->err_msg)); + 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)); + 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)); + the_event->evt.asmt.rhs.ival, + &(the_event->err_msg)); break; default: @@ -381,6 +440,35 @@ int Globals::globalAssign( event* the_event ){ break; } break; + + case G_ORTHOBOXTOLERANCE: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. orthoBoxTolerance is not a double or int.\n" ); + return 0; + break; + + case DOUBLE: + orthoBoxTolerance = the_event->evt.asmt.rhs.dval; + have_target_temp = 1; + return 1; + break; + + case INT: + orthoBoxTolerance = (double)the_event->evt.asmt.rhs.ival; + have_target_temp = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error.orthoBoxTolerance unrecognized.\n" ); + return 0; + break; + } + break; case G_ENSEMBLE: if( the_type == STRING ){ @@ -719,11 +807,40 @@ 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: + the_event->err_msg = strdup( "Global error. thermalTime is not a double or int.\n" ); return 0; break; @@ -743,8 +860,37 @@ int Globals::globalAssign( event* the_event ){ default: the_event->err_msg = strdup( "Global error. thermalTime unrecognized.\n" ); + return 0; + break; + } + break; + + case G_LJRCUT: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. LJrcut is not a double or int.\n" ); return 0; break; + + case DOUBLE: + LJrcut = the_event->evt.asmt.rhs.dval; + have_ljrcut = 1; + return 1; + break; + + case INT: + LJrcut = (double)the_event->evt.asmt.rhs.ival; + have_ljrcut = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. LJrcut unrecognized.\n" ); + return 0; + break; } break; @@ -851,6 +997,44 @@ 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_USEINIT_XS_STATE: + if( the_type == STRING ){ + + if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) + useInitXSstate = 1; + else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) + useInitXSstate = 0; + else{ + the_event->err_msg = + strdup( "Global error. useInitExtendedSystemState was not \"true\" or \"false\".\n" ); + return 0; + } + return 1; + } + + the_event->err_msg = + strdup( "Global error. useInitExtendedSystemState was not \"true\" or \"false\".\n" ); return 0; break; @@ -890,6 +1074,24 @@ int Globals::globalAssign( event* the_event ){ return 0; break; + case G_USEMOLECULARCUTOFFS: + if( the_type == STRING ){ + + if( !strcasecmp( "true", the_event->evt.asmt.rhs.sval )) useMolecularCutoffs = 1; + else if( !strcasecmp( "false", the_event->evt.asmt.rhs.sval )) useMolecularCutoffs = 0; + else{ + the_event->err_msg = + strdup( "Global error. useMolecularCutoffs was not \"true\" or \"false\".\n" ); + return 0; + } + return 1; + } + + the_event->err_msg = + strdup( "Global error. useMolecularCutoffs was not \"true\" or \"false\".\n" ); + return 0; + break; + case G_TARGETPRESSURE: switch( the_type ){ @@ -977,7 +1179,7 @@ int Globals::globalAssign( event* the_event ){ } break; - case G_ZCONSTIME: + case G_ZCONSTIME: switch( the_type ){ case STRING: @@ -1006,7 +1208,7 @@ int Globals::globalAssign( event* the_event ){ } break; - case G_ZCONSTOL: + case G_ZCONSTOL: switch( the_type ){ case STRING: @@ -1035,8 +1237,394 @@ int Globals::globalAssign( event* the_event ){ } 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; + + case G_ZCONSGAP: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. zcons_gap is not a double or int.\n" ); + return 0; + break; + + case DOUBLE: + zcons_gap = the_event->evt.asmt.rhs.dval; + have_zcons_gap= 1; + return 1; + break; + + case INT: + zcons_gap= (double)the_event->evt.asmt.rhs.ival; + have_zcons_gap= 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. zcons_gap unrecognized.\n" ); + return 0; + break; + } + break; + + case G_ZCONSFIXTIME: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. zcons_fixtime is not a double or int.\n" ); + return 0; + break; + + case DOUBLE: + zcons_fixtime= the_event->evt.asmt.rhs.dval; + have_zcons_fixtime= 1; + return 1; + break; + + case INT: + zcons_fixtime= (double)the_event->evt.asmt.rhs.ival; + have_zcons_fixtime= 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. zcons_fixtime unrecognized.\n" ); + return 0; + break; + } + break; + + case G_ZCONSUSINGSMD: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. zcons_fixtime is not an int.\n" ); + return 0; + break; + + case DOUBLE: + the_event->err_msg = + strdup( "Global error. zcons_fixtime is not an int.\n" ); + return 0; + break; + + case INT: + zcons_using_smd= the_event->evt.asmt.rhs.ival; + have_zcons_using_smd= 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. zcons_usingsmd unrecognized.\n" ); + return 0; + break; + } + break; + + case G_MINIMIZER: + switch( the_type ){ + + case STRING: + strcpy(minimizer_name, the_event->evt.asmt.rhs.sval); + + for(int i = 0; zconsForcePolicy[i] != '\0'; i++){ + zconsForcePolicy[i] = toupper(zconsForcePolicy[i]); + } + have_minimizer= 1; + return 1; + break; + + case DOUBLE: + the_event->err_msg = + strdup( "Global error. minimizer_name is not a double or int.\n" ); + return 0; + break; + + case INT: + the_event->err_msg = + strdup( "Global error. minimizer_name is not a double or int.\n" ); + return 0; + break; + + default: + the_event->err_msg = + strdup( "Global error. minimizer_name unrecognized.\n" ); + return 0; + break; + } + break; + + case G_MIN_MAXITER: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. minimizer_maxiteration is not a double or int.\n" ); + return 1; + break; + + case DOUBLE: + minimizer_maxiteration = the_event->evt.asmt.rhs.dval; + have_minimizer_maxiteration = 1; + return 1; + break; + + case INT: + minimizer_maxiteration = the_event->evt.asmt.rhs.ival; + have_minimizer_maxiteration = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. minimizer_maxiteration unrecognized.\n" ); + return 0; + break; + } + break; + + case G_MIN_WRITEFRQ: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. minimizer_writefrq is not a double or int.\n" ); + return 1; + break; + + case DOUBLE: + minimizer_writefrq= the_event->evt.asmt.rhs.dval; + have_minimizer_writefrq = 1; + return 1; + break; + + case INT: + minimizer_writefrq= the_event->evt.asmt.rhs.ival; + have_minimizer_writefrq = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. minimizer_writefrq unrecognized.\n" ); + return 0; + break; + } + break; + + case G_MIN_STEPSIZE: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. minimizer_resetfrq is not a double or int.\n" ); + return 1; + break; + + case DOUBLE: + minimizer_stepsize= the_event->evt.asmt.rhs.dval; + have_minimizer_stepsize = 1; + return 1; + break; + + case INT: + minimizer_stepsize= the_event->evt.asmt.rhs.ival; + have_minimizer_stepsize = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. minimizer_resetfrq unrecognized.\n" ); + return 0; + break; + } + break; + + case G_MIN_FTOL: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. minimizer_ftol is not a double or int.\n" ); + return 1; + break; + + case DOUBLE: + minimizer_ftol= the_event->evt.asmt.rhs.dval; + have_minimizer_ftol = 1; + return 1; + break; + + case INT: + minimizer_ftol= the_event->evt.asmt.rhs.ival; + have_minimizer_ftol = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. minimizer_ftol unrecognized.\n" ); + return 0; + break; + } + break; + + case G_MIN_GTOL: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. minimizer_gtol is not a double or int.\n" ); + return 1; + break; + + case DOUBLE: + minimizer_gtol= the_event->evt.asmt.rhs.dval; + have_minimizer_gtol = 1; + return 1; + break; + + case INT: + minimizer_gtol= the_event->evt.asmt.rhs.ival; + have_minimizer_gtol = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. minimizer_gtol unrecognized.\n" ); + return 0; + break; + } + break; + + case G_MIN_LSMAXITER: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. minimizer_ls_maxiteration is not a double or int.\n" ); + return 1; + break; + + case DOUBLE: + minimizer_ls_maxiteration = the_event->evt.asmt.rhs.dval; + have_minimizer_ls_maxiteration = 1; + return 1; + break; + + case INT: + minimizer_ls_maxiteration = the_event->evt.asmt.rhs.ival; + have_minimizer_ls_maxiteration = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. minimizer_ls_maxiteration unrecognized.\n" ); + return 0; + break; + } + break; + + case G_MIN_LSTOL: + switch( the_type ){ + + case STRING: + the_event->err_msg = + strdup( "Global error. minimizer_ls_tol is not a double or int.\n" ); + return 1; + break; + + case DOUBLE: + minimizer_ls_tol= the_event->evt.asmt.rhs.dval; + have_minimizer_ls_tol = 1; + return 1; + break; + + case INT: + minimizer_ls_tol= the_event->evt.asmt.rhs.ival; + have_minimizer_ls_tol = 1; + return 1; + break; + + default: + the_event->err_msg = + strdup( "Global error. minimizer_ls_tol 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. } } @@ -1098,10 +1686,11 @@ char* Globals::checkMe( void ){ have_err= 1; } - if( !have_ensemble ){ - strcat( err, "\t->ensemble\n" ); - have_err= 1; - } + if(!have_minimizer) + if( !have_ensemble ){ + strcat( err, "\t->ensemble\n" ); + have_err= 1; + } if( !have_dt ){ strcat( err, "\t->dt\n" );