tl/dr: Manual is not explicit whether subcircuit calls can use m=val; and other suspected subcircuit parameter misinformation.
The sections 2.4.3 and 2.8.3 each show a general-form of subcircuit calls without mention of optional m=val, unlike general-forms of primitive devices.
The section 3.1.1 language about where "m" is available uses two fragments: "more devices" and "all instances".
The section 2.8.3 states usage of subcircuit call parameters is very strict: that the default value intent does not work, parameters on instances can't be a subset of what's declared on the .subckt line, and can't be in an different order.
My requests:
1: Do subcircuit cells support an optional m=val? Do 3.1.1 "more devices" and "all instances" include subcircuit calls as a device/instance being referred to, or exclude them?
2: Are the 2.8.3 limitations on subcircuit call parameters no longer true?
The inv subckt call in examples/measure/inv-meas-tran.sp contradicts these restrictions.
The memristor subckt call in examples/memristor/memristor.sp contradicts these restrictions.
3: Please correct any of these entries that are no longer accurate.
The word MULTI in the example of 2.4.3, in the position of the SUBNAM, is unfortunate. Despite AFAIK being a valid SUBNAM, suggest replacing it.
4. Please reword these manual entries to make the meaning very explicit either way. e.g.:
Both 2.4.3, 2.8.3: "Subcircuit calls {can|cannot} simulate more subcircuit calls of the same kind in parallel using the m=val option." And if supported, add "<m=val>" to the general-form.
In 3.1.1: "more devices {including|excluding} subcircuit calls", and "all instances {including|excluding} subcircuit calls except...".
5. fix typo: 2.8.3 is missing a word (ngspice) after "current version of".
fyi: A related code extract, src/frontend/inpcom.c :
/* If a subcircuit invocation (X-line) is found, which contains the multiplier parameter 'm', m is added to all lines inside the corresponding subcircuit except of some excluded in the code below (FIXME: It may be necessary to exclude more of them, at least for all devices that are not supporting the 'm' parameter). Function is called from inp_fix_inst_calls_for_numparam() */ static int inp_fix_subckt_multiplier(struct names *subckt_w_params, struct line *subckt_card, int num_subckt_params, char *subckt_param_names[], char *subckt_param_values[]) { ... }
Related text extracts from the manual (consistent across git manual.pdf builds as-of: 2016-06-01 and 2014-02-07).
2.4.3 Subcircuit Calls
General form:
XYYYYYYY N1 <N2 N3 ... > SUBNAM
Examples:
X1 2 4 17 3 1 MULTI
2.8.3 Subcircuit parameters
The <value> parts are supposed to be default values of the parameters. However, in the current version of , they are not used and each invocation of the subcircuit must supply the exact number of actual parameters.
...
General form:
X<name> node node . . . <identn> <ident>=<value> <ident>=<value>
...
The sequence of <value> items on the X line must exactly match the number and the order of formal parameters of the subcircuit.
3.1.1 Simulating more devices in parallel
If you need to simulate more devices of the same kind in parallel, you can use the "m" (often called parallel multiplier) option which is available for all instances except transmission lines and sources (both independent and controlled)
using:
$ ngspice -v
ngspice compiled from ngspice revision 26
Written originally by Berkeley University
Currently maintained by the NGSpice Project
Copyright (C) 1985-1996, The Regents of the University of California
Copyright (C) 1999-2011, The NGSpice Project
bump