## 4.2 Functions

Gnucap behavioral modeling functions are an extension of the Spice source time dependent values.

### 4.2.1 The extensions

They apply to all elements (primitive components).
All accept either Spice compatible order dependent parameters, or easier keyword=value notation.
The syntax is identical for all supported components.

### 4.2.2 Fixed sources

Time dependent functions are voltage or current as a function of time. They are mostly Spice compatible, with extensions.
Nonlinear transfer functions use time as the independent variable. Some may not make sense, but they are there anyway.

### 4.2.3 Capacitors and inductors

Time dependent functions are capacitance or inductance as a function of time. They are voltage/current conserving, not charge/flux conserving.
Nonlinear transfer functions are charge or flux as a function of input (voltage or current). Charge and flux are conserved, and can be probed.

### 4.2.4 Resistors and conductances

Time dependent functions are resistance or conductance as a function of time.
Nonlinear transfer functions are current or voltage as a function of input (voltage or current). Resistors define voltage as a function of current. Conductances define current as a function of voltage.

### 4.2.5 Controlled sources

Time dependent functions are gain (v/v, transconductance, etc) function of time.
Nonlinear transfer functions are output (voltage or current) as a function of input (voltage or current).

### 4.2.6 Available functions

`COMPLEX`
  Complex (re, im) value.
`EXP`
  Spice Exp source. (time dependent value).
`FIT`
  Fit a curve with splines.
`GENERATOR`
  Value from Generator command.
`POLY`
  Polynomial (Spice style).
`POSY`
  Posynomial (Like poly, non-integer powers).
`PULSE`
  Spice Pulse source. (time dependent value).
`PWL`
  Piece-wise linear.
`SFFM`
  Spice Frequency Modulation (time dependent value).
`SIN`
  Spice Sin source. (time dependent value).
`TANH`
  Hyperbolic tangent transfer function.

In addition, you may name a “function” defined by a `.model` statement. The following `.model` types may be used here:

`TABLE`
  Fit a curve with splines.
`Cap`
  Spice semiconductor “capacitor” model.
`Res`
  Spice semiconductor “resistor” model.

### 4.2.7 Parameters that apply to all functions

These parameters are available with all functions. Some may not make sense in some cases, but they are available anyway.

`Bandwidth` = x
  AC analysis bandwidth. (Default = infinity.) The transfer function is frequency dependent, with a 3 DB point at this frequency. There is frequency dependent phase shift ranging from 0 degrees at low frequencies to 90 degrees at high frequencies. The phase shift is 45 degrees at the specified frequency. AC ANALYSIS ONLY.
`Delay` = x
  AC analysis delay. (Default = 0.) The signal is delayed by x seconds, effectively by a frequency dependent phase shift. AC ANALYSIS ONLY.
`Phase` = x
  AC analysis phase. (Default = 0.) A fixed phase shift is applied. This is primarily intended for sources, but applies to all elements. AC ANALYSIS ONLY.
`IOffset` = x
  Input offset. (Default = 0.) A DC offset is added to the “input” of the element, before evaluating the function.
`OOffset` = x
  Output offset. (Default = 0.) A DC offset is added to the “output” of the element, after evaluating the function.
`Scale` = x
  Transfer function scale factor. (Default = 1.) The transfer function is multiplied by a constant.
`TNOM` = x
  Nominal temperature. (Default = .option TNOM) The nominal values apply at this temperature.
`TC1` = x
  First order temperature coefficient. (Default = 0.)
`TC2` = x
  Second order temperature coefficient. (Default = 0.)
`IC` = x
  Initial condition. An initial value, to force at time=0. The actual parameter applied depends on the component. (Capacitor voltage, inductor current. All others ignore it.) You must use the “UIC” option for it to be used.

Temperature adjustments and scaling use the following formula:

    value *= _scale * (1 + _tc1*tempdiff
                  + _tc2*tempdiff*tempdiff)

where `tempdiff` is `t - _tnom`.