Skip to content
RLCModel.md

RLCModel ​

An electrical circuit model featuring an inductor in series with a parallel resistor-capacitor combination, driven by a constant voltage source.

This model represents an electrical circuit where an inductor (L) is connected in series with a parallel arrangement of a resistor (R) and a capacitor (C). This L-(R||C) configuration is subjected to a constant voltage provided by a voltage source. The key dynamics are governed by Kirchhoff's laws. Initial conditions are specified for iL(0)=0A and vC(0)=10V. The system is expected to reach a steady state where vC=Vsig=30V.

Usage ​

ElectricalComponents.RLCModel()

Behavior ​

julia
using ElectricalComponents #hide
using ModelingToolkit #hide
@named sys = ElectricalComponents.RLCModel() #hide
full_equations(sys) #hide
<< @example-block not executed in draft mode >>

Source ​

dyad
"""
An electrical circuit model featuring an inductor in series with a parallel resistor-capacitor combination, driven by a constant voltage source.

This model represents an electrical circuit where an inductor (L) is connected in series with a parallel arrangement of a resistor (R) and a capacitor (C).
This L-(R||C) configuration is subjected to a constant voltage provided by a voltage source.  The key dynamics are governed by Kirchhoff's laws.
Initial conditions are specified for $i_L(0) = 0A$ and $v_C(0) = 10V$. The system is expected to reach a steady state where $v_C = V_{sig} = 30V$.
"""
example component RLCModel
  "Resistor subcomponent with a resistance value of 100 Ohms."
  resistor = Resistor(R = 100) {
    "Dyad": {
      "placement": {"diagram": {"x1": 850, "y1": 450, "x2": 950, "y2": 550, "rot": -90}}
    }
  }
  "Capacitor subcomponent with a capacitance value of 1 milliFarad."
  capacitor = Capacitor(C = 1m) {
    "Dyad": {
      "placement": {"diagram": {"x1": 550, "y1": 450, "x2": 650, "y2": 550, "rot": -90}}
    }
  }
  "Inductor subcomponent with an inductance value of 1 Henry."
  inductor = Inductor(L = 1) {
    "Dyad": {
      "placement": {"diagram": {"x1": 375, "y1": 250, "x2": 475, "y2": 350, "rot": 0}}
    }
  }
  "Constant signal generator block providing an output value of 30."
  signal = BlockComponents.Constant(k = 30) {"Dyad": {"placement": {"icon": {"x1": 0, "y1": 450, "x2": 100, "y2": 550}}}}
  "Voltage source subcomponent providing the electromotive force."
  source = VoltageSource() {
    "Dyad": {
      "placement": {"diagram": {"x1": 200, "y1": 450, "x2": 300, "y2": 550, "rot": -90}}
    }
  }
  "Ground subcomponent providing the reference potential (0V)."
  ground = Ground() {
    "Dyad": {
      "placement": {"diagram": {"x1": 550, "y1": 800, "x2": 650, "y2": 900, "rot": 0}}
    }
  }
relations
  initial inductor.i = 0
  initial capacitor.v = 10
  connect(signal.y, source.V) {"Dyad": {"edges": [{"S": 1, "E": 2}]}}
  connect(source.n, inductor.p) {"Dyad": {"edges": [{"S": 1, "M": [{"x": 250, "y": 300}], "E": 2}]}}
  connect(inductor.n, resistor.n, capacitor.n) {
    "Dyad": {
      "edges": [
        {"S": 1, "E": -1},
        {"S": 2, "M": [{"x": 900, "y": 300}], "E": -1},
        {"S": 3, "E": -1}
      ],
      "junctions": [{"x": 600, "y": 300}]
    }
  }
  connect(resistor.p, ground.g, capacitor.p, source.p) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [{"x": 900, "y": 700}], "E": -1},
        {"S": 2, "E": -1},
        {"S": 3, "E": -1},
        {"S": -1, "M": [{"x": 250, "y": 700}], "E": 4}
      ],
      "junctions": [{"x": 600, "y": 700}]
    }
  }
metadata {
  "Dyad": {
    "labels": [
      {
        "label": "RLC Model",
        "x": 800,
        "y": 100,
        "layer": "diagram",
        "attrs": {"font-size": "100"}
      },
      {"label": "$(instance)", "x": 500, "y": 1100}
    ],
    "tests": {
      "case1": {
        "stop": 10,
        "expect": {"initial": {"capacitor.v": 10}, "final": {"capacitor.v": 30}}
      }
    }
  }
}
end
Flattened Source
dyad
"""
An electrical circuit model featuring an inductor in series with a parallel resistor-capacitor combination, driven by a constant voltage source.

This model represents an electrical circuit where an inductor (L) is connected in series with a parallel arrangement of a resistor (R) and a capacitor (C).
This L-(R||C) configuration is subjected to a constant voltage provided by a voltage source.  The key dynamics are governed by Kirchhoff's laws.
Initial conditions are specified for $i_L(0) = 0A$ and $v_C(0) = 10V$. The system is expected to reach a steady state where $v_C = V_{sig} = 30V$.
"""
example component RLCModel
  "Resistor subcomponent with a resistance value of 100 Ohms."
  resistor = Resistor(R = 100) {
    "Dyad": {
      "placement": {"diagram": {"x1": 850, "y1": 450, "x2": 950, "y2": 550, "rot": -90}}
    }
  }
  "Capacitor subcomponent with a capacitance value of 1 milliFarad."
  capacitor = Capacitor(C = 1m) {
    "Dyad": {
      "placement": {"diagram": {"x1": 550, "y1": 450, "x2": 650, "y2": 550, "rot": -90}}
    }
  }
  "Inductor subcomponent with an inductance value of 1 Henry."
  inductor = Inductor(L = 1) {
    "Dyad": {
      "placement": {"diagram": {"x1": 375, "y1": 250, "x2": 475, "y2": 350, "rot": 0}}
    }
  }
  "Constant signal generator block providing an output value of 30."
  signal = BlockComponents.Constant(k = 30) {"Dyad": {"placement": {"icon": {"x1": 0, "y1": 450, "x2": 100, "y2": 550}}}}
  "Voltage source subcomponent providing the electromotive force."
  source = VoltageSource() {
    "Dyad": {
      "placement": {"diagram": {"x1": 200, "y1": 450, "x2": 300, "y2": 550, "rot": -90}}
    }
  }
  "Ground subcomponent providing the reference potential (0V)."
  ground = Ground() {
    "Dyad": {
      "placement": {"diagram": {"x1": 550, "y1": 800, "x2": 650, "y2": 900, "rot": 0}}
    }
  }
relations
  initial inductor.i = 0
  initial capacitor.v = 10
  connect(signal.y, source.V) {"Dyad": {"edges": [{"S": 1, "E": 2}]}}
  connect(source.n, inductor.p) {"Dyad": {"edges": [{"S": 1, "M": [{"x": 250, "y": 300}], "E": 2}]}}
  connect(inductor.n, resistor.n, capacitor.n) {
    "Dyad": {
      "edges": [
        {"S": 1, "E": -1},
        {"S": 2, "M": [{"x": 900, "y": 300}], "E": -1},
        {"S": 3, "E": -1}
      ],
      "junctions": [{"x": 600, "y": 300}]
    }
  }
  connect(resistor.p, ground.g, capacitor.p, source.p) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [{"x": 900, "y": 700}], "E": -1},
        {"S": 2, "E": -1},
        {"S": 3, "E": -1},
        {"S": -1, "M": [{"x": 250, "y": 700}], "E": 4}
      ],
      "junctions": [{"x": 600, "y": 700}]
    }
  }
metadata {
  "Dyad": {
    "labels": [
      {
        "label": "RLC Model",
        "x": 800,
        "y": 100,
        "layer": "diagram",
        "attrs": {"font-size": "100"}
      },
      {"label": "$(instance)", "x": 500, "y": 1100}
    ],
    "tests": {
      "case1": {
        "stop": 10,
        "expect": {"initial": {"capacitor.v": 10}, "final": {"capacitor.v": 30}}
      }
    }
  }
}
end


Test Cases ​

julia
using ElectricalComponents
using DyadInterface: TransientAnalysis, rebuild_sol
using ModelingToolkit: toggle_namespacing, get_defaults, @named
using CSV, DataFrames, Plots

snapshotsdir = joinpath(dirname(dirname(pathof(ElectricalComponents))), "test", "snapshots")
<< @setup-block not executed in draft mode >>

Test Case case1 ​

julia
@named model_case1 = RLCModel()
model_case1 = toggle_namespacing(model_case1, false)

model_case1 = toggle_namespacing(model_case1, true)
result_case1 = TransientAnalysis(; model = model_case1, alg = "auto", start = 0e+0, stop = 1e+1, abstol=1e-6, reltol=1e-6)
sol_case1 = rebuild_sol(result_case1)
<< @setup-block not executed in draft mode >>
  • Examples

  • Experiments

  • Analyses