From add098ff6ce92430950ed094488c2bc5a239e215 Mon Sep 17 00:00:00 2001 From: Chris Maffeo <cmaffeo2@illinois.edu> Date: Tue, 7 Mar 2017 17:37:35 -0600 Subject: [PATCH] Added configuration options for specifying system size --- src/Configuration.cpp | 44 +++++++++++++++++++++++++++++++++++-------- src/Configuration.h | 3 +++ 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/Configuration.cpp b/src/Configuration.cpp index 7503560..ecfbec9 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -125,7 +125,7 @@ Configuration::Configuration(const char* config_file, int simNum, bool debug) : printf("\nFound temperature grid file: %s\n", temperatureGridFile.val()); tGrid = new BaseGrid(temperatureGridFile.val()); printf("Loaded `%s'.\n", temperatureGridFile.val()); - printf("System size %s.\n", tGrid->getExtent().toString().val()); + printf("Grid size %s.\n", tGrid->getExtent().toString().val()); // TODO: ask Max Belkin what this is about and how to remove hard-coded temps float ToSo = 1.0f / (295.0f * 4.634248239f); // 1 / (To * sigma(To)) @@ -158,7 +158,7 @@ Configuration::Configuration(const char* config_file, int simNum, bool debug) : part[i].meanPmf = part[i].pmf->mean(); printf("Loaded dx potential grid `%s'.\n", map.val()); - printf("System size %s.\n", part[i].pmf->getExtent().toString().val()); + printf("Grid size %s.\n", part[i].pmf->getExtent().toString().val()); } else if (len >= 4 && map[len-4]=='.' && map[len-3]=='d' && map[len-2]=='e' && map[len-1]=='f') { // A system definition file. String rootGrid = OverlordGrid::readDefFirst(map); @@ -178,25 +178,25 @@ Configuration::Configuration(const char* config_file, int simNum, bool debug) : if (partForceXGridFile[i].length() != 0) { part[i].forceXGrid = new BaseGrid(partForceXGridFile[i].val()); printf("Loaded `%s'.\n", partForceXGridFile[i].val()); - printf("System size %s.\n", part[i].forceXGrid->getExtent().toString().val()); + printf("Grid size %s.\n", part[i].forceXGrid->getExtent().toString().val()); } if (partForceYGridFile[i].length() != 0) { part[i].forceYGrid = new BaseGrid(partForceYGridFile[i].val()); printf("Loaded `%s'.\n", partForceYGridFile[i].val()); - printf("System size %s.\n", part[i].forceYGrid->getExtent().toString().val()); + printf("Grid size %s.\n", part[i].forceYGrid->getExtent().toString().val()); } if (partForceZGridFile[i].length() != 0) { part[i].forceZGrid = new BaseGrid(partForceZGridFile[i].val()); printf("Loaded `%s'.\n", partForceZGridFile[i].val()); - printf("System size %s.\n", part[i].forceZGrid->getExtent().toString().val()); + printf("Grid size %s.\n", part[i].forceZGrid->getExtent().toString().val()); } if (partDiffusionGridFile[i].length() != 0) { part[i].diffusionGrid = new BaseGrid(partDiffusionGridFile[i].val()); printf("Loaded `%s'.\n", partDiffusionGridFile[i].val()); - printf("System size %s.\n", part[i].diffusionGrid->getExtent().toString().val()); + printf("Grid size %s.\n", part[i].diffusionGrid->getExtent().toString().val()); } if (temperatureGridFile.length() != 0) { @@ -211,7 +211,6 @@ Configuration::Configuration(const char* config_file, int simNum, bool debug) : // part[i].diffusionGrid->write(outFile, comment); } } - } // Load reservoir files if any @@ -226,8 +225,20 @@ Configuration::Configuration(const char* config_file, int simNum, bool debug) : // Get the system dimensions // from the dimensions of supplied 3D potential maps + if (size.length2() > 0) { // use size if it's defined + if (basis1.length2() > 0 || basis2.length2() > 0 || basis3.length2() > 0) + printf("WARNING: both 'size' and 'basis' were specified... using 'size'\n"); + basis1 = Vector3(size.x,0,0); + basis2 = Vector3(0,size.y,0); + basis3 = Vector3(0,0,size.z); + } + if (basis1.length2() > 0 && basis2.length2() > 0 && basis3.length2() > 0) { + sys = new BaseGrid( Matrix3(basis1,basis2,basis3), origin, 1, 1, 1 ); + } else { + // TODO: use largest system in x,y,z sys = part[0].pmf; - sysDim = part[0].pmf->getExtent(); + } + sysDim = sys->getExtent(); // RBTODO: clean this mess up /* // RigidBodies... */ @@ -541,6 +552,13 @@ void Configuration::setDefaults() { rigidBodyGridGridPeriod = 1; steps = 100; seed = 0; + + origin = Vector3(0,0,0); + size = Vector3(0,0,0); + basis1 = Vector3(0,0,0); + basis2 = Vector3(0,0,0); + basis3 = Vector3(0,0,0); + inputCoordinates = ""; restartCoordinates = ""; numberFluct = 0; @@ -662,6 +680,16 @@ int Configuration::readParameters(const char * config_file) { steps = atol(value.val()); else if (param == String("seed")) seed = atoi(value.val()); + else if (param == String("origin")) + origin = stringToVector3( value ); + else if (param == String("systemSize")) + size = stringToVector3( value ); + else if (param == String("basis1")) + basis1 = stringToVector3( value ); + else if (param == String("basis2")) + basis2 = stringToVector3( value ); + else if (param == String("basis3")) + basis3 = stringToVector3( value ); else if (param == String("inputCoordinates")) inputCoordinates = value; else if (param == String("restartCoordinates")) diff --git a/src/Configuration.h b/src/Configuration.h index 64f4acf..d68168d 100644 --- a/src/Configuration.h +++ b/src/Configuration.h @@ -87,6 +87,9 @@ public: // Output variables Vector3 sysDim; BaseGrid* sys; + // temporary variables + Vector3 origin, size, basis1, basis2, basis3; + bool loadedCoordinates; -- GitLab