diff --git a/componant/cap.cpp b/componant/cap.cpp index ff4e349400ec49a793904992fd13153532f862ad..05ab41e1c9b97e95e6c3ceb8f5f8c04c04aaa22b 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 dcaed9a1c9020b8865d34322c46ffb4616d06a4e..d0487829dcaf01f8701f1b29973c11a819dcd9d5 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 89fed415a6e0eda11a95e19bd71c043acaaf5396..ca9ddf1f02a430b0fb750bdb457365ff947840ba 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 13d2767e1ed21cb33ec1c55ebd18b7da8d093392..f1a89dfd771d6e8b2a71b3d2a0523b06641c443f 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 d2d8ea134b6d9e3c4e69f683bcc57ae5c0bb5297..b0b3f019284f3b19d54ea6d87db52d4771e68ec1 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 17fdbe9b830ccfc851234d56e4002084eb726542..06d370157dbf1350cc851e0528fd9d9c9f8ee2f9 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 4471230b9677c23d59559f385117b7e8534c11fd..c5b58a9af8232ff3d7059d6c7f6c51672a228f9c 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 78070597fb4a8dc02f31a8f162748b405b08e65e..31038c217c4beca14c2a411145365eb7b8e85769 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 5b8432da27750083d1ab8fb84597539487c0825e..93e33e0a4b11e5480942e36474ade921836c00e9 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 15e3acf2a21636fddebc60c505944e54b942873a..e4252f5d93548380c51f7156084e7f222e6979c8 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 ca4afde8432a9191bb71bc837da5273cf5e4a85c..dfd4277597085e684bb03e67d5344a9dee7f32e0 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 a6e7129b8b2771c60f1053b4a0de249ce5e290e8..e4afd6c6e2e98c6d1d9dafcc126e31c67d99785f 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 154c01b2de6d822f1d9ca4212e2092869ea8b4df..26575346f110cd594b603c51fb8a885ef1a98ca7 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 4dfa02da9ca6d8a58cc460e061d2c34f4860cc19..7529bf7bdbf029582be0baf1e324ea4a5c5f83f6 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 e13f2525aa7d4bed9090abd03f2cd78c0b647719..09aa1ae1c4db59931392a4bdfeb96656a4b05d71 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));