349
edits
Line 25: | Line 25: | ||
The CIR file is divided into two sections describing the linear time–independent (LCR = linear circuit) and the non–linear and/or time–dependent (NLC = non–linear circuit) partitions of the circuit respectively. The syntax for the LCR and NLC section is identical. NLC can also contain linear elements, in fact the whole circuit could be described only by the NLC section but this could result in the evaluator unnecessarily recomputing local matrices for linear time–independent elements The content of CIR files is organized as follows: | The CIR file is divided into two sections describing the linear time–independent (LCR = linear circuit) and the non–linear and/or time–dependent (NLC = non–linear circuit) partitions of the circuit respectively. The syntax for the LCR and NLC section is identical. NLC can also contain linear elements, in fact the whole circuit could be described only by the NLC section but this could result in the evaluator unnecessarily recomputing local matrices for linear time–independent elements The content of CIR files is organized as follows: | ||
{{Code|CIR file format |<syntaxhighlight lang="text" style="font-size:13px"> | |||
cir := header nlc separator lcr separator ; | |||
header := '%' version_id '$\nl$' | |||
comment* ; | |||
comment:= '%' text '$\nl$' ; | |||
nlc := block* ; | |||
block := blockcomment? blockheader pv_matrix vnum_matrix ; | |||
block_comment := '%' text '$\nl$' ; | |||
block_header := func section n_extvar n_par '$\nl$' | |||
n_rows n_parnames '$\nl$' | |||
par_name*; | |||
section := string ; | |||
n_extvar := number ; | |||
n_par := number ; | |||
n_rows := number ; | |||
n_parnames := number ; | |||
par_name := string ; | |||
pv_matrix := matrix ; | |||
vnum_matrix := matrix ; | |||
matrix := number+ ; | |||
separator := 'END $\nl$' ; | |||
lcr := block* ; | |||
</syntaxhighlight}} | |||
where version id is a string identifying the version on IFF in which the file is encoded | |||
* "\n" is the new-line character string that represents anything that the Octave command "s=fscanf(file,%s)" would parse as a string i.e. any sequence of chars without white-space | |||
* "text" is any sequence of chars without a \n, this differs from string because it can contain white–space number represents anything that the Octave command "s=fscanf(file,%g)" would parse as a number | |||
* "func" is the name of a function to evaluate the elements described in the block | |||
* "n_extvar" Is the number of external variables for the elements of a block | |||
* "n_par" Is the number of parameters for the elements of a block | |||
* "n_rows" Is the number of elements in a block | |||
* n_parnames" Is the number of parameter names for the elements of a block, it corresponds to the number of par name entries. If "n_parnames" is 0 the line with the "par_names" is missing. | |||
* "pv_matrix" Is a list of n_rows x n_par numbers separated by any character the Octave command "s=fscanf(file,%g)" would consider whitespace (including "\n"). Every row (a set of n par contiguous entries) in "pv_matrix" refers to an element of the circuit. The "n_par" numbers in a row represent the values of the parameters to be passed to the function that evaluates that element. | |||
* "vnum_matrix" Is a list of "n_rows" x "n_extvar" numbers separated by any character the Octave command "s=fscanf(file,%g)" would consider white-space (including \n). | |||
Every row (a set of "n_extvar" contiguous entries) in "vnum_matrix" refers to an element of the circuit. The "n_extvar" numbers in the row represent the global numbering of the element external variables. | |||
=== SPICE netlists === | === SPICE netlists === |
edits