This shows you the differences between two versions of the page.
| — |
gnucap:manual:tech:plugins:output [2020/02/13 05:27] (current) felixs created. needs formatting |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | <code> | ||
| + | Pluggable output (preliminary) | ||
| + | Some data is generated by (simulation) commands. Depending on the application | ||
| + | it needs to appear on the screen, in an array, in a file or should be forwarded | ||
| + | to another process. Sometimes it is just analysed on the fly, and acted upon. | ||
| + | Whichever way, this is implemented in OUTPUT plugins. Eventually adding another | ||
| + | file format or adding another application is decoupled from implementing yet | ||
| + | another simulation command. | ||
| + | |||
| + | An output plugin (usually) registers a command derived from OUTPUT_CMD with an | ||
| + | associated class derived from OUTPUT. OUTPUT carries a PROBE_LIST, a list of | ||
| + | those probes that are evaluated when producing output data. | ||
| + | |||
| + | In the traditional spice invocation | ||
| + | > print tran v(nodes) | ||
| + | "print" executes an OUTPUT_CMD. It collects the probes "v(nodes)" sticks it to | ||
| + | an OUTPUT object that implements printing and attaches the object to a command | ||
| + | registered as "tran". generally if `output` is an output command, and `sim` is | ||
| + | a simulation command, then the invocation | ||
| + | > output sim [.. probes ..] | ||
| + | creates the OUTPUT object associated with the "output" formatting and attaches | ||
| + | `sim` command. note that there is only one (static) instance per command. | ||
| + | |||
| + | An OUTPUT object may overload these virtual functions | ||
| + | |||
| + | OUTPUT::init(int level, std::string reason) | ||
| + | initialise, e.g. allocate space. level may be used to | ||
| + | control the granularity of the output, e.g. diagnostics. | ||
| + | |||
| + | OUTPUT::head(double l, double h, string s) | ||
| + | Prepare a page or file or window to fill with data. The | ||
| + | parameters l and h specify the range of the output axis | ||
| + | and its name, respectively. | ||
| + | |||
| + | OUTPUT::commit(double X, int level) | ||
| + | Collect or print data from the circuit, usually through | ||
| + | probes, if indicated by level. X is between l and h | ||
| + | passed to head, other values can be used to send | ||
| + | supplementary data, c.f. level. | ||
| + | |||
| + | OUTPUT::flush Postprocess data, or close file handle. Whatever is | ||
| + | needed to finalise. | ||
| + | |||
| + | |||
| + | The `sim` command then may call OUTPUT functions through | ||
| + | SIM::out_*(..). | ||
| + | |||
| + | SIM::out_set(CS&) setup I/O, redirection etc, as specified by the user | ||
| + | provided command. | ||
| + | SIM::out_init(TRACE) initialise. TRACE specifies how much diagnostics | ||
| + | to show, c.f. s__.h. | ||
| + | SIM::out_head specify the layout for the next page of data. | ||
| + | as in table head | ||
| + | SIM::out_commit trigger probe readings and output collection. | ||
| + | SIM::out_flush signal end of page, end of table, end of chunk. | ||
| + | SIM::out_reset I/O reset, low level. | ||
| + | </code> | ||