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> |