Skip to content
Snippets Groups Projects
Commit a68ac33d authored by Carl Philipp Klemm's avatar Carl Philipp Klemm
Browse files

componants: implement getDefaultRange

parent c1f45f8b
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
......
......@@ -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;
......
......@@ -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;
}
......
......@@ -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;
}
......
......@@ -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;
}
......
......@@ -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;
}
......
......@@ -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;
}
......
......@@ -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;
};
......
......@@ -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;
......
......@@ -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;
};
......
......@@ -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";}
......
......@@ -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;
};
......
......@@ -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;
};
......
......@@ -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;
};
......
......@@ -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));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment