diff --git a/eisgenerator/eistype.h b/eisgenerator/eistype.h index edd83ff74fc1217f84a81e919f8c63136b39e2fa..595ecb870ef221827cb82928da22b5317a46383c 100644 --- a/eisgenerator/eistype.h +++ b/eisgenerator/eistype.h @@ -32,12 +32,13 @@ public: { return at(step); } + fvalue at(size_t index) const { assert(index < count); if(count < 2) return start; - return log ? pow(10, stepSize()*index+start) : stepSize()*index+start; + return log ? pow(10, stepSize()*index+log10(start)) : stepSize()*index+start; } fvalue operator[](size_t index) const { @@ -63,6 +64,7 @@ public: Range() = default; void print(int level) const; std::string getString() const; + bool isSane() const; static std::vector<Range> rangesFromParamString(const std::string& paramStr, size_t count); }; diff --git a/eistype.cpp b/eistype.cpp index ad2fbd66d5c9a70d8319452b3cba889ca7bf164c..148487bcb6b5ffa4d0018a23af101bc11e6b946b 100644 --- a/eistype.cpp +++ b/eistype.cpp @@ -79,7 +79,16 @@ std::string eis::Range::getString() const if(count > 1) ss<<'~'<<end; if(log) - ss<<'F'; + ss<<'L'; return ss.str(); } + +bool eis::Range::isSane() const +{ + if(log && (start == 0 || end == 0)) + return false; + if(end < start) + return false; + return true; +} diff --git a/main.cpp b/main.cpp index 6df99523472fcb809c036fd587f55f4bc5fc28d1..e96ce37d334a4104b46ec7cce343ca89d1b02b2d 100644 --- a/main.cpp +++ b/main.cpp @@ -85,11 +85,12 @@ static void runParamSweep(Config config, eis::Model& model) auto start = std::chrono::high_resolution_clock::now(); for(size_t i = 0; i < count; ++i) { + eis::Log(eis::Log::DEBUG)<<"Executeing sweep for "<<i; std::vector<eis::DataPoint> data = model.executeSweep(config.omegaRange, i); size_t outputSize = data.size(); data = eis::reduceRegion(data); data = eis::rescale(data, outputSize); - eis::saveToDisk(data, std::string(PARA_SWEEP_OUTPUT_DIR)+std::string("/")+std::to_string(++i)+".csv"); + eis::saveToDisk(data, std::string(PARA_SWEEP_OUTPUT_DIR)+std::string("/")+std::to_string(i)+".csv"); eis::Log(eis::Log::INFO, false)<<'.'; } auto end = std::chrono::high_resolution_clock::now(); @@ -108,6 +109,12 @@ int main(int argc, char** argv) if(config.hertz) config.omegaRange = config.omegaRange*static_cast<fvalue>(2*M_PI); + if(!config.omegaRange.isSane()) + { + eis::Log(eis::Log::INFO)<<"The Omega range: "<<config.omegaRange.getString()<<" is invalid"; + return 1; + } + if(config.inputType == INPUT_TYPE_BOUKAMP) config.modelStr = eis::cdcToEis(config.modelStr); else if(config.inputType == INPUT_TYPE_RELAXIS) diff --git a/model.cpp b/model.cpp index 02e3a68df03d0d589fb8d8c382dc78479ff3c38b..74c0bb76b012c0f5a923a4b8a7401bc215304285 100644 --- a/model.cpp +++ b/model.cpp @@ -277,21 +277,22 @@ void Model::resolveSteps(int64_t index) std::vector<size_t> placeMagnitude; placeMagnitude.reserve(flatRanges.size()); + Log(Log::DEBUG)<<"Magnitudes:"; for(size_t i = 0; i < flatRanges.size(); ++i) { size_t magnitude = 1; for(int64_t j = static_cast<int64_t>(i)-1; j >= 0; --j) - { magnitude = magnitude*flatRanges[j]->count; - } placeMagnitude.push_back(magnitude); + Log(Log::DEBUG)<<placeMagnitude.back(); } - for(int64_t i = flatRanges.size(); i >= 0 && index > 0; --i) + Log(Log::DEBUG)<<"Steps for index "<<index<<" ranges "<<flatRanges.size()<<" Ranges:"; + for(int64_t i = flatRanges.size()-1; i >= 0; --i) { flatRanges[i]->step = index/placeMagnitude[i]; index = index % placeMagnitude[i]; - Log(Log::DEBUG)<<placeMagnitude[i]<<'('<<flatRanges[i]->step<<')'<<(i == 0 ? "\n" : " + "); + Log(Log::DEBUG)<<placeMagnitude[i]<<'('<<flatRanges[i]->step<<')'<<(i == 0 ? "" : " + "); } }