## Component Variants — Series RLC Branch

The following example shows a series RLC component that implements a single resistor, inductor, or capacitor, or a series combination of these elements. The component uses conditional sections to implement the control logic.

```import foundation.electrical.electrical; % electrical domain class definition import foundation.electrical.elements.*; % electrical elements component SeriesRLC nodes p = electrical; % +:left n = electrical; % -:right end nodes(Access=protected, ExternalAccess=none) rl = electrical; % internal node between r and l lc = electrical; % internal node between l and c end parameters R = {0, 'Ohm'}; L = {0, 'H'}; C = {inf, 'F'}; end if R > 0 components r = resistor(R=R); end connections connect(p, r.p); connect(r.n, rl); end else connections connect(p, rl); % short circuit p--rl end end if L > 0 components l = inductor(l=L); end connections connect(rl, l.p); connect(l.n, lc); end else connections connect(rl, lc); % short circuit rl--lc end end if value(C, 'F') < inf components c = capacitor(c=C); end connections connect(lc, c.p); connect(c.n, n); end else connections connect(lc, n); % short circuit lc--n end end end ```

The R, L, and C parameters are initialized to `0`, `0`, and `inf`, respectively. If the block user specifies a nonzero resistance, nonzero impedance, or finite capacitance, the appropriate branch gets activated. The active branch declares the appropriate member component and connects it in series. Each of the `else` clauses short-circuits the appropriate nodes.

Internal nodes `rl` and `lc`, which serve to connect the member components, should not be accessible from outside the component. Set their `Access` attribute to `protected` or `private`. Their `ExternalAccess` attribute is `none`, so that these nodes are not visible on the block icon.