From a68ac33d52f6ac18ed779b2a8217360cf0b957e5 Mon Sep 17 00:00:00 2001 From: Carl Philipp Klemm <philipp@uvos.xyz> Date: Mon, 6 Nov 2023 13:35:29 +0100 Subject: [PATCH] componants: implement getDefaultRange --- componant/cap.cpp | 24 +++++++++++++---- componant/componant.cpp | 7 +++++ componant/constantphase.cpp | 26 ++++++++++++++----- componant/finitetr.cpp | 36 +++++++++++++++++++------- componant/inductor.cpp | 24 +++++++++++++---- componant/resistor.cpp | 24 +++++++++++++---- componant/warburg.cpp | 24 +++++++++++++---- eisgenerator/componant/cap.h | 3 ++- eisgenerator/componant/componant.h | 3 ++- eisgenerator/componant/constantphase.h | 3 ++- eisgenerator/componant/finitetr.h | 3 ++- eisgenerator/componant/inductor.h | 3 ++- eisgenerator/componant/resistor.h | 3 ++- eisgenerator/componant/warburg.h | 3 ++- eisgenerator/eistype.h | 4 +++ 15 files changed, 148 insertions(+), 42 deletions(-) diff --git a/componant/cap.cpp b/componant/cap.cpp index ff4e349..05ab41e 100644 --- a/componant/cap.cpp +++ b/componant/cap.cpp @@ -20,15 +20,29 @@ Cap::Cap(std::string paramStr, size_t count, bool defaultToRange) if(ranges.size() != paramCount()) { - ranges.clear(); + ranges = getDefaultRange(defaultToRange); if(defaultToRange) - ranges.push_back(Range(1e-10, 1e-4, count, true)); - else - ranges.push_back(Range(1e-6, 1e-6, 1)); + { + for(eis::Range& range : ranges) + range.count = count; + } Log(Log::WARN)<<__func__<<" default range of "<<getComponantString(false)<<" will be used"; } } +std::vector<eis::Range> Cap::getDefaultRange(bool range) const +{ + std::vector<eis::Range> out; + + if(range) + out.push_back(Range(1e-10, 1e-4, 2, true)); + else + out.push_back(Range(1e-6, 1e-6, 1)); + + assert(out.size() == paramCount()); + return out; +} + std::complex<fvalue> Cap::execute(fvalue omega) { assert(ranges.size() > 0); @@ -40,7 +54,7 @@ char Cap::getComponantChar() const return Cap::staticGetComponantChar(); } -size_t Cap::paramCount() +size_t Cap::paramCount() const { return 1; } diff --git a/componant/componant.cpp b/componant/componant.cpp index dcaed9a..d048782 100644 --- a/componant/componant.cpp +++ b/componant/componant.cpp @@ -28,6 +28,13 @@ std::vector<eis::Range> Componant::getParamRanges() const return ranges; } +std::vector<eis::Range> Componant::getDefaultRange(bool range) const +{ + (void)range; + assert(paramCount() == 0); + return std::vector<eis::Range>(); +} + std::string Componant::getComponantString(bool currentValue) const { std::stringstream out; diff --git a/componant/constantphase.cpp b/componant/constantphase.cpp index 89fed41..ca9ddf1 100644 --- a/componant/constantphase.cpp +++ b/componant/constantphase.cpp @@ -40,17 +40,31 @@ Cpe::Cpe(std::string paramStr, size_t count, bool defaultToRange) void Cpe::setDefaultParam(size_t count, bool defaultToRange) { - ranges.clear(); + ranges = getDefaultRange(defaultToRange); if(defaultToRange) { - ranges.push_back(Range(1e-10, 1e-4, count, true)); - ranges.push_back(Range(0.5, 0.9, count)); + for(eis::Range& range : ranges) + range.count = count; + } +} + +std::vector<eis::Range> Cpe::getDefaultRange(bool range) const +{ + std::vector<eis::Range> out; + + if(range) + { + out.push_back(Range(1e-10, 1e-4, 2, true)); + out.push_back(Range(0.5, 0.9, 2)); } else { - ranges.push_back(Range(1e-7, 1e-7, 1)); - ranges.push_back(Range(0.9, 0.9, 1)); + out.push_back(Range(1e-7, 1e-7, 1)); + out.push_back(Range(0.9, 0.9, 1)); } + + assert(out.size() == paramCount()); + return out; } std::complex<fvalue> Cpe::execute(fvalue omega) @@ -61,7 +75,7 @@ std::complex<fvalue> Cpe::execute(fvalue omega) return std::complex<fvalue>(real, imag); } -size_t Cpe::paramCount() +size_t Cpe::paramCount() const { return 2; } diff --git a/componant/finitetr.cpp b/componant/finitetr.cpp index 13d2767..f1a89df 100644 --- a/componant/finitetr.cpp +++ b/componant/finitetr.cpp @@ -7,7 +7,6 @@ #include "componant/resistor.h" #include "componant/cap.h" #include "log.h" -#include "strops.h" using namespace eis; @@ -33,19 +32,38 @@ void FiniteTransmitionline::setDefaultParam(size_t count, bool defaultToRange) _R = 1000; _n = 4; - ranges.clear(); + ranges = getDefaultRange(defaultToRange); + if(defaultToRange) { - ranges.push_back(Range(1e-10, 1e-4, count, true)); - ranges.push_back(Range(1, 1e4, count, true)); - ranges.push_back(Range(_n, _n, 1)); + for(eis::Range& range : ranges) + range.count = count; + } +} + +std::vector<eis::Range> FiniteTransmitionline::getDefaultRange(bool range) const +{ + const fvalue C = 1e-6; + const fvalue R = 1000; + const fvalue n = 4; + + std::vector<eis::Range> out(paramCount()); + + if(range) + { + out[0] = Range(1e-10, 1e-4, 2, true); + out[1] = Range(1, 1e4, 2, true); + out[2] = Range(n, n, 1); } else { - ranges.push_back(Range(_C, _C, 1)); - ranges.push_back(Range(_R, _R, 1)); - ranges.push_back(Range(_n, _n, 1)); + out[0] = Range(C, C, 1); + out[1] = Range(R, R, 1); + out[2] = Range(n, n, 1); } + + assert(out.size() == paramCount()); + return out; } FiniteTransmitionline::FiniteTransmitionline(std::string paramStr, size_t count, bool defaultToRange) @@ -93,7 +111,7 @@ char FiniteTransmitionline::getComponantChar() const return FiniteTransmitionline::staticGetComponantChar(); } -size_t FiniteTransmitionline::paramCount() +size_t FiniteTransmitionline::paramCount() const { return 3; } diff --git a/componant/inductor.cpp b/componant/inductor.cpp index d2d8ea1..b0b3f01 100644 --- a/componant/inductor.cpp +++ b/componant/inductor.cpp @@ -20,22 +20,36 @@ Inductor::Inductor(std::string paramStr, size_t count, bool defaultToRange) if(ranges.size() != paramCount()) { - ranges.clear(); + ranges = getDefaultRange(defaultToRange); if(defaultToRange) - ranges.push_back(Range(1e-10, 1e-4, count, true)); - else - ranges.push_back(Range(1e-6, 1e-6, 1)); + { + for(eis::Range& range : ranges) + range.count = count; + } Log(Log::WARN)<<__func__<<" default range of "<<getComponantString(false)<<" will be used"; } } +std::vector<eis::Range> Inductor::getDefaultRange(bool range) const +{ + std::vector<eis::Range> out; + + if(range) + out.push_back(Range(1e-10, 1e-4, 2, true)); + else + out.push_back(Range(1e-6, 1e-6, 1)); + + assert(out.size() == paramCount()); + return out; +} + std::complex<fvalue> Inductor::execute(fvalue omega) { assert(ranges.size() == paramCount()); return std::complex<fvalue>(0, ranges[0][ranges[0].step]*omega); } -size_t Inductor::paramCount() +size_t Inductor::paramCount() const { return 1; } diff --git a/componant/resistor.cpp b/componant/resistor.cpp index 17fdbe9..06d3701 100644 --- a/componant/resistor.cpp +++ b/componant/resistor.cpp @@ -20,15 +20,29 @@ Resistor::Resistor(std::string paramStr, size_t count, bool defaultToRange) if(ranges.size() != paramCount()) { - ranges.clear(); + ranges = getDefaultRange(defaultToRange); if(defaultToRange) - ranges.push_back(Range(1, 1e4, count, true)); - else - ranges.push_back(Range(100, 100, 1)); + { + for(eis::Range& range : ranges) + range.count = count; + } Log(Log::WARN)<<__func__<<" default range of "<<getComponantString(false)<<" will be used"; } } +std::vector<eis::Range> Resistor::getDefaultRange(bool range) const +{ + std::vector<eis::Range> out; + + if(range) + out.push_back(Range(1, 1e4, 2, true)); + else + out.push_back(Range(100, 100, 1)); + + assert(out.size() == paramCount()); + return out; +} + std::complex<fvalue> Resistor::execute(fvalue omega) { (void)omega; @@ -36,7 +50,7 @@ std::complex<fvalue> Resistor::execute(fvalue omega) return std::complex<fvalue>(ranges[0].stepValue(), 0); } -size_t Resistor::paramCount() +size_t Resistor::paramCount() const { return 1; } diff --git a/componant/warburg.cpp b/componant/warburg.cpp index 4471230..c5b58a9 100644 --- a/componant/warburg.cpp +++ b/componant/warburg.cpp @@ -20,15 +20,29 @@ Warburg::Warburg(std::string paramStr, size_t count, bool defaultToRange) if(ranges.size() != paramCount()) { - ranges.clear(); + ranges = getDefaultRange(defaultToRange); if(defaultToRange) - ranges.push_back(Range(10, 100, count, true)); - else - ranges.push_back(Range(50, 50, 1)); + { + for(eis::Range& range : ranges) + range.count = count; + } Log(Log::WARN)<<__func__<<" default range of "<<getComponantString(false)<<" will be used"; } } +std::vector<eis::Range> Warburg::getDefaultRange(bool range) const +{ + std::vector<eis::Range> out; + + if(range) + out.push_back(Range(10, 100, 2, true)); + else + out.push_back(Range(50, 50, 1)); + + assert(out.size() == paramCount()); + return out; +} + std::complex<fvalue> Warburg::execute(fvalue omega) { assert(ranges.size() == paramCount()); @@ -36,7 +50,7 @@ std::complex<fvalue> Warburg::execute(fvalue omega) return std::complex<fvalue>(N, 0-N); } -size_t Warburg::paramCount() +size_t Warburg::paramCount() const { return 1; } diff --git a/eisgenerator/componant/cap.h b/eisgenerator/componant/cap.h index 7807059..31038c2 100644 --- a/eisgenerator/componant/cap.h +++ b/eisgenerator/componant/cap.h @@ -13,12 +13,13 @@ public: Cap(std::string paramStr, size_t count = 10, bool defaultToRange = false); Cap(fvalue c = 1e-6); virtual std::complex<fvalue> execute(fvalue omega) override; - virtual size_t paramCount() override; + virtual size_t paramCount() const override; virtual char getComponantChar() const override; static constexpr char staticGetComponantChar(){return 'c';} virtual std::string componantName() const override {return "Capacitor";} virtual std::string getCode(std::vector<std::string>& parameters) override; virtual std::string getTorchScript(std::vector<std::string>& parameters) override; + virtual std::vector<eis::Range> getDefaultRange(bool range = true) const override; virtual ~Cap() = default; }; diff --git a/eisgenerator/componant/componant.h b/eisgenerator/componant/componant.h index 5b8432d..93e33e0 100644 --- a/eisgenerator/componant/componant.h +++ b/eisgenerator/componant/componant.h @@ -26,7 +26,8 @@ class Componant virtual void setParamRanges(const std::vector<eis::Range>& ranges); virtual std::vector<eis::Range>& getParamRanges(); virtual std::vector<eis::Range> getParamRanges() const; - virtual size_t paramCount(){return 0;} + virtual std::vector<eis::Range> getDefaultRange(bool range = true) const; + virtual size_t paramCount() const {return 0;}; virtual ~Componant() = default; virtual char getComponantChar() const = 0; virtual std::string getComponantString(bool currentValue = true) const; diff --git a/eisgenerator/componant/constantphase.h b/eisgenerator/componant/constantphase.h index 15e3acf..e4252f5 100644 --- a/eisgenerator/componant/constantphase.h +++ b/eisgenerator/componant/constantphase.h @@ -16,11 +16,12 @@ public: Cpe(fvalue q, fvalue alpha); Cpe(); virtual std::complex<fvalue> execute(fvalue omega) override; - virtual size_t paramCount() override; + virtual size_t paramCount() const override; virtual char getComponantChar() const override; static constexpr char staticGetComponantChar(){return 'p';} virtual std::string componantName() const override {return "ConstantPhase";} virtual ~Cpe() = default; + virtual std::vector<eis::Range> getDefaultRange(bool range = true) const override; virtual std::string getCode(std::vector<std::string>& parameters) override; virtual std::string getTorchScript(std::vector<std::string>& parameters) override; }; diff --git a/eisgenerator/componant/finitetr.h b/eisgenerator/componant/finitetr.h index ca4afde..dfd4277 100644 --- a/eisgenerator/componant/finitetr.h +++ b/eisgenerator/componant/finitetr.h @@ -21,7 +21,8 @@ public: FiniteTransmitionline(std::string paramStr, size_t count = 10, bool defaultToRange = false); FiniteTransmitionline(const FiniteTransmitionline& in); virtual std::complex<fvalue> execute(fvalue omega) override; - virtual size_t paramCount(); + virtual size_t paramCount() const override; + virtual std::vector<eis::Range> getDefaultRange(bool range = true) const override; virtual ~FiniteTransmitionline(); virtual char getComponantChar() const override; virtual std::string componantName() const override {return "FiniteTransmitionline";} diff --git a/eisgenerator/componant/inductor.h b/eisgenerator/componant/inductor.h index a6e7129..e4afd6c 100644 --- a/eisgenerator/componant/inductor.h +++ b/eisgenerator/componant/inductor.h @@ -13,11 +13,12 @@ public: Inductor(std::string paramStr, size_t count = 10, bool defaultToRange = false); Inductor(fvalue L = 1e-6); virtual std::complex<fvalue> execute(fvalue omega) override; - virtual size_t paramCount() override; + virtual size_t paramCount() const override; virtual char getComponantChar() const override; static constexpr char staticGetComponantChar(){return 'l';} virtual std::string componantName() const override {return "Inductor";} virtual std::string getCode(std::vector<std::string>& parameters) override; + virtual std::vector<eis::Range> getDefaultRange(bool range = true) const override; virtual std::string getTorchScript(std::vector<std::string>& parameters) override; virtual ~Inductor() = default; }; diff --git a/eisgenerator/componant/resistor.h b/eisgenerator/componant/resistor.h index 154c01b..2657534 100644 --- a/eisgenerator/componant/resistor.h +++ b/eisgenerator/componant/resistor.h @@ -11,11 +11,12 @@ public: Resistor(fvalue r); Resistor(std::string paramStr, size_t count = 10, bool defaultToRange = false); virtual std::complex<fvalue> execute(fvalue omega) override; - virtual size_t paramCount() override; + virtual size_t paramCount() const override; virtual char getComponantChar() const override; static constexpr char staticGetComponantChar(){return 'r';} virtual std::string componantName() const override {return "Resistor";} virtual std::string getCode(std::vector<std::string>& parameters) override; + virtual std::vector<eis::Range> getDefaultRange(bool range = true) const override; virtual std::string getTorchScript(std::vector<std::string>& parameters) override; virtual ~Resistor() = default; }; diff --git a/eisgenerator/componant/warburg.h b/eisgenerator/componant/warburg.h index 4dfa02d..7529bf7 100644 --- a/eisgenerator/componant/warburg.h +++ b/eisgenerator/componant/warburg.h @@ -13,11 +13,12 @@ public: Warburg(std::string paramStr, size_t count = 10, bool defaultToRange = false); Warburg(fvalue a = 2e4); virtual std::complex<fvalue> execute(fvalue omega) override; - virtual size_t paramCount() override; + virtual size_t paramCount() const override; virtual char getComponantChar() const override; static constexpr char staticGetComponantChar(){return 'w';} virtual std::string componantName() const override {return "Warburg";} virtual std::string getCode(std::vector<std::string>& parameters) override; + virtual std::vector<eis::Range> getDefaultRange(bool range = true) const override; virtual std::string getTorchScript(std::vector<std::string>& parameters) override; virtual ~Warburg() = default; }; diff --git a/eisgenerator/eistype.h b/eisgenerator/eistype.h index e13f252..09aa1ae 100644 --- a/eisgenerator/eistype.h +++ b/eisgenerator/eistype.h @@ -84,6 +84,10 @@ public: { return at(step); } + fvalue center() const + { + return (start+end)/2; + } fvalue at(size_t index) const { assert(index < count || (index == 0 && count == 0)); -- GitLab