summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@arcor.de>2016-12-23 23:37:56 +0100
committer couriersud <couriersud@arcor.de>2016-12-24 00:58:36 +0100
commit3506240e198084966715e1dcbe3e74d9a6e100e4 (patch)
treebee1a0ef774814f5ac03d8400459e71fd10e5c39
parentc6440a43d4c3f53ba4635daab73d465b703b0164 (diff)
Added inductor to netlist. (nw)
-rw-r--r--src/lib/netlist/analog/nld_twoterm.cpp21
-rw-r--r--src/lib/netlist/analog/nld_twoterm.h61
-rw-r--r--src/lib/netlist/devices/net_lib.cpp1
3 files changed, 73 insertions, 10 deletions
diff --git a/src/lib/netlist/analog/nld_twoterm.cpp b/src/lib/netlist/analog/nld_twoterm.cpp
index 3ddff27557d..089b11f8607 100644
--- a/src/lib/netlist/analog/nld_twoterm.cpp
+++ b/src/lib/netlist/analog/nld_twoterm.cpp
@@ -117,6 +117,27 @@ NETLIB_UPDATE(C)
}
// ----------------------------------------------------------------------------------------
+// nld_L
+// ----------------------------------------------------------------------------------------
+
+NETLIB_RESET(L)
+{
+ set(netlist().gmin(), 0.0, 5.0 / netlist().gmin());
+ //set(1.0/NETLIST_GMIN, 0.0, -5.0 * NETLIST_GMIN);
+}
+
+NETLIB_UPDATE_PARAM(L)
+{
+ //step_time(1.0/48000.0);
+ //m_GParallel = netlist().gmin() / m_L();
+}
+
+NETLIB_UPDATE(L)
+{
+ NETLIB_NAME(twoterm)::update();
+}
+
+// ----------------------------------------------------------------------------------------
// nld_D
// ----------------------------------------------------------------------------------------
diff --git a/src/lib/netlist/analog/nld_twoterm.h b/src/lib/netlist/analog/nld_twoterm.h
index b5de48ae1d8..f59b9e62594 100644
--- a/src/lib/netlist/analog/nld_twoterm.h
+++ b/src/lib/netlist/analog/nld_twoterm.h
@@ -40,34 +40,38 @@
// -----------------------------------------------------------------------------
#define RES(name, p_R) \
- NET_REGISTER_DEV(RES, name) \
+ NET_REGISTER_DEV(RES, name) \
NETDEV_PARAMI(name, R, p_R)
#define POT(name, p_R) \
- NET_REGISTER_DEV(POT, name) \
+ NET_REGISTER_DEV(POT, name) \
NETDEV_PARAMI(name, R, p_R)
/* Does not have pin 3 connected */
#define POT2(name, p_R) \
- NET_REGISTER_DEV(POT2, name) \
+ NET_REGISTER_DEV(POT2, name) \
NETDEV_PARAMI(name, R, p_R)
#define CAP(name, p_C) \
- NET_REGISTER_DEV(CAP, name) \
+ NET_REGISTER_DEV(CAP, name) \
NETDEV_PARAMI(name, C, p_C)
+#define IND(name, p_L) \
+ NET_REGISTER_DEV(IND, name) \
+ NETDEV_PARAMI(name, L, p_L)
+
/* Generic Diode */
-#define DIODE(name, model) \
- NET_REGISTER_DEV(DIODE, name) \
+#define DIODE(name, model) \
+ NET_REGISTER_DEV(DIODE, name) \
NETDEV_PARAMI(name, MODEL, model)
-#define VS(name, pV) \
- NET_REGISTER_DEV(VS, name) \
+#define VS(name, pV) \
+ NET_REGISTER_DEV(VS, name) \
NETDEV_PARAMI(name, V, pV)
-#define CS(name, pI) \
- NET_REGISTER_DEV(CS, name) \
+#define CS(name, pI) \
+ NET_REGISTER_DEV(CS, name) \
NETDEV_PARAMI(name, I, pI)
// -----------------------------------------------------------------------------
@@ -303,6 +307,43 @@ private:
};
+// -----------------------------------------------------------------------------
+// nld_L
+// -----------------------------------------------------------------------------
+
+NETLIB_OBJECT_DERIVED(L, twoterm)
+{
+public:
+ NETLIB_CONSTRUCTOR_DERIVED(L, twoterm)
+ , m_L(*this, "L", 1e-6)
+ , m_GParallel(0.0)
+ , m_G(0.0)
+ , m_I(0.0)
+ {
+ //register_term("1", m_P);
+ //register_term("2", m_N);
+ }
+
+ NETLIB_TIMESTEP()
+ {
+ /* Gpar should support convergence */
+ m_I = m_I + m_G * deltaV();
+ m_G = step / m_L() + m_GParallel;
+ set(m_G, 0.0, m_I);
+ }
+
+ param_double_t m_L;
+
+protected:
+ NETLIB_RESETI();
+ NETLIB_UPDATEI();
+ NETLIB_UPDATE_PARAMI();
+
+private:
+ nl_double m_GParallel;
+ nl_double m_G;
+ nl_double m_I;
+};
// -----------------------------------------------------------------------------
// A generic diode model to be used in other devices (Diode, BJT ...)
diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp
index 092d5239988..3e654dab2d1 100644
--- a/src/lib/netlist/devices/net_lib.cpp
+++ b/src/lib/netlist/devices/net_lib.cpp
@@ -77,6 +77,7 @@ static void initialize_factory(factory_list_t &factory)
ENTRY(POT, POT, "R")
ENTRY(POT2, POT2, "R")
ENTRY(C, CAP, "C")
+ ENTRY(L, IND, "L")
ENTRY(D, DIODE, "MODEL")
ENTRY(VCVS, VCVS, "-")
ENTRY(VCCS, VCCS, "-")