2011-03-10 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Fixed out-of-bounds segfault in [] operator.
2011-03-07 Stefan Jahn <stefan@lkcc.org>
* applications.h: Stated more possible combinations for ?:
operation.
* evaluate.cpp: Implemented 'equal' (== and !=) operations for
more argument variations.
2009-11-12 Stefan Jahn <stefan@lkcc.org>
* interpolator.cpp (cinterpolate): Implemented complex data
interpolations.
2009-11-03 Stefan Jahn <stefan@lkcc.org>
* receiver.cpp (receiver): Fixed small bug occurring if time
vector not starting with zero time is passed. Using new vector
object passer in interpolator class.
* interpolator.cpp: Allowing vector objects to be passed as
original sample vectors.
(rinterpolate): Fixed tiny bugs in linear and hold interpolation.
* check_csv.cpp: Fixed memory leak.
2009-11-01 Stefan Jahn <stefan@lkcc.org>
* receiver.cpp: Now having three types of filters for the EMI
receiver: ideal, simple bandpass of 2nd order and gaussian. Also
saving time vector to be reconstructed since it is equidistant
(thereby can be calculated) anyway. Always use interpolation.
2009-10-31 Stefan Jahn <stefan@lkcc.org>
* interpolator.cpp: Implemented interpolator class. It will be
useful for "everywhere" use in the simulator, e.g. file based
sources, the EMI receiver functionality, etc. Still have to add
complex version of the interpolator.
* receiver.cpp: Implemented EMI receiver functionality.
* evaluate.cpp: Put EMI receiver functionality in place for the
equation solver.
* spline.cpp: Added new function passing original vectors as
simple pointers to the spline object.
2009-10-04 Stefan Jahn <stefan@lkcc.org>
* matvec.cpp: Added two more static helper functions to determine
matrix entries in vector list of datasets.
2009-09-13 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp (FOURIER_HELPER_1): Checking vector lengths given
to Time2Freq() and Freq2Time() as well as indices into vectors
given in ranges.
2009-04-19 Stefan Jahn <stefan@lkcc.org>
* matrix.cpp: Implemented matrix power operation with integral
positive and negative powers. Made it available in the equation
solver.
2009-04-16 Stefan Jahn <stefan@lkcc.org>
* scan_netlist.l: Accept global node notation.
* check_netlist.cpp: Made node translations aware of global nodes
like "subst!".
2009-03-29 Stefan Jahn <stefan@lkcc.org>
* fourier.cpp (fftshift): New function which shifts the values of
a FFT vector such that the frequency 0 is in the center of the
resulting vector.
2009-03-22 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Fixed dB() calculation for real arguments to
reflect power conversion (10*log10) as in all other computations.
2009-03-14 Stefan Jahn <stefan@lkcc.org>
* trsolver.cpp: Allowing time start/stop to be steered by sweep
variables correctly.
2009-03-07 Stefan Jahn <stefan@lkcc.org>
* equation.cpp (getVector): Helper function for environment
access.
* environment.cpp: Handling vector values appropriately.
* check_netlist.cpp: Passing vectors in environment.
2008-11-16 Stefan Jahn <stefan@lkcc.org>
* acsolver.cpp: Voltage probe now returns noise voltage data
properly.
2008-10-26 Stefan Jahn <stefan@lkcc.org>
* sweep.cpp: Return 'Values' property content of parent analysis
for constant sweeps.
* check_netlist.cpp: Allowing parameter sweep variables or other
variable in the 'Values' property (when it is marked 'const') of
simulation boxes.
2008-10-08 Stefan Jahn <stefan@lkcc.org>
* compat.h: New file containing system specific #include's and
#define's. Changed all callers.
2008-10-07 Stefan Jahn <stefan@lkcc.org>
* module.cpp: Added a function which can emit the list of
registered components as compilable C-code (into the file
'qucsdefs.h').
* netdefs.h: Removed limitation of the number of required and
optional properties a component can have.
2008-10-06 Stefan Jahn <stefan@lkcc.org>
* scan_dataset.l: Fixed data identifier syntax (e.g. Versus.0001).
* check_netlist.cpp: Finally removed any component specific
checks. Now everything can be checked by the registered module
properties.
2008-10-05 Stefan Jahn <stefan@lkcc.org>
* check_netlist.cpp: Removed special string validation in
properties. Identifier ranges are now stored directly in property
definitions, thus checking can be done using the component
specifications.
* module.cpp: First steps towards modularization. Changes in all
component files. New components now only need to register in this
file.
2008-10-03 Stefan Jahn <stefan@lkcc.org>
* input.cpp: New function registerCircuits(). Global preparations
for modularization of circuit components...
2008-09-30 Stefan Jahn <stefan@lkcc.org>
* input.cpp: Fixed instantiation of HICUM L0/V1.2 model.
2008-09-13 Stefan Jahn <stefan@lkcc.org>
* equation.cpp: Fixed segfault bug and memory leakage.
2008-09-12 Stefan Jahn <stefan@lkcc.org>
* equation.cpp: Added ddx() operation. Could be useful for EDD
equations. Works like the ddx() operator in Verilog-A.
* differentiate.cpp: Implemented kind of reduction function for
divisions. Could be template for more sophisticated reductions.
2008-08-14 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Fixed range operator in indices in independent
vectors.
2008-07-03 Stefan Jahn <stefan@lkcc.org>
* check_netlist.cpp: Allowing property references inside the same
instance of a component.
2008-05-27 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Fixed small memory leak.
* equation.cpp: Looking for variables also in the equation set
(not just in dataset) for functions like, e.g., xvalue() and
yvalue().
2008-04-23 Stefan Jahn <stefan@lkcc.org>
* check_touchstone.cpp: Fixed compile issue for some gcc/glibc
combination (SuSE linux).
2008-04-11 Stefan Jahn <stefan@lkcc.org>
* check_netlist.cpp: Fixing compile issues for MSVC.
2008-03-27 Stefan Jahn <stefan@lkcc.org>
* qucsdefs.h (qucs_definition_available): Allowing negative
coupling coefficients for mutual inductors.
* evaluate.cpp: Added some more allowed function arguments for
relational operators.
2008-02-16 Stefan Jahn <stefan@lkcc.org>
* scan_netlist.l: Additionally allowing dBu in equations as well
as mil, in, ft and yd in component properties.
2008-02-15 Stefan Jahn <stefan@lkcc.org>
* Fixed some compile warnings for g++ 4.3 version.
2008-01-18 Stefan Jahn <stefan@lkcc.org>
* circuit.cpp: Added new method setInternalNode().
* evaluate.cpp: Allowing PlotVs() to take 3 and more arguments to
construct multiple dependencies for vectors and matrix vectors.
* equation.cpp: Fixed inheritance of multiple prep dependencies.
2008-01-02 Stefan Jahn <stefan@lkcc.org>
* scan_touchstone.l: Fixed bug in touchstone scanner. Making the
'R' in the option line case insensitive.
2007-12-30 Stefan Jahn <stefan@lkcc.org>
* parasweep.cpp: Allow parameter sweeps to display their own
prgress bar. Lower order sweeps and other simulations' progress
bar get disabled.
2007-12-28 Stefan Jahn <stefan@lkcc.org>
* ucs.cpp (main): Evaluating error codes from analyses. Changed
solve() callback for each analysis to be able to return an error
code.
* trsolver.cpp: Avoiding "jacobian singular at t = nan" error
message.
2007-12-11 Stefan Jahn <stefan@lkcc.org>
* hash.h (class hashentry): Fixed compile error for "gcc version
4.1.1 on fedora 7 linux".
2007-11-02 Stefan Jahn <stefan@lkcc.org>
* vector.cpp: Added optional third argument to unwrap() specifying
the phase/angle step.
2007-11-01 Stefan Jahn <stefan@lkcc.org>
* applications.h: Added StabFactor() as alias for Rollet().
* matrix.cpp (b1), matvec.cpp (b1): Added new function calculating
the stability measure B1 of a 2-port S-parameter matrix.
2007-10-22 Stefan Jahn <stefan@lkcc.org>
* parse_netlist.y: First preparation to allow vector properties to
be a reference to equation variables.
2007-10-21 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Fixed 'out of bounds' return value in order to
avoid segmentation fault.
2007-10-19 Stefan Jahn <stefan@lkcc.org>
* environment.cpp: Added 'passing' attribute to variables in the
environment. Thus computed values in an environment don't get
passed from the environment variables, but any others will be
passed as usual (e.g. subcircuit parameters).
2007-10-02 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Added the ?: operator for matrices as well as
vectors.
Implemented dB() function for matrices and matrix vectors.
2007-09-27 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Fixed if-then-else evaluation for mixed
real/complex arguments as well as for pure complex arguments.
2007-09-25 Stefan Jahn <stefan@lkcc.org>
* equation.cpp: Fixed toString() function for evaluated matrices.
Added printing functionality for immediate vectors and matrices.
New function returning a double value for all kinds of result
types.
2007-09-23 Stefan Jahn <stefan@lkcc.org>
* scan_netlist.l: Added syntax elements for immediate vectors and
matrices.
* parse_netlist.y: Added grammar for immediate vectors and
matrices.
* evaluate.cpp: Implemented evaluators for immediate vectors and
matrices.
* equation.cpp: Allowing applications with undetermined number of
arguments. New function appendNodes() which can be used to
concatenate argument lists.
2007-09-20 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Added random number functions.
2007-09-04 Stefan Jahn <stefan@lkcc.org>
* differentiate.cpp: Fixed some memory leaks.
* equation.cpp: Added new property to an equation node 'skip'
indicating that the node (e.g. equation assignment) is skipped from
evaluation when the solver is run.
* environment.cpp: Added new function which just evaluates (no
checking and no dataset) the equations in an environment.
2007-09-02 Stefan Jahn <stefan@lkcc.org>
* scan_netlist.l: Allowing engineering notation of numbers in
equations.
2007-08-23 Stefan Jahn <stefan@lkcc.org>
* parasweep.cpp: Implemented new initialize() and cleanup()
callbacks. This fixes a bug occurring for nested sweeps where the
sweep variable of an inner-loop sweep is used in an equation.
* net.cpp: Run new initialize() and cleanup() functionality of
analyses.
2007-08-15 Stefan Jahn <stefan@lkcc.org>
* dataset.cpp: New function to load CSV files added.
* check_csv.cpp, scan_csv.l, parse_csv.y: Implemented lexer,
parser and checker for CSV files.
* matrix.cpp: Documented missing 1/2 factor in some matrix
conversions.
2007-06-17 Stefan Jahn <stefan@lkcc.org>
* parse_netlist.y: Re-allow range specifications as function
arguments. It disappreared while implementing the ?: operator.
2007-06-15 Stefan Jahn <stefan@lkcc.org>
* variable.cpp: New type of variables: stored result values.
* history.cpp: Fixed bug occurring when time value vector is
shorter than the value vector.
* environment.cpp: New function for saving local variable resutls
in the environment. Not yet used...
2007-05-27 Stefan Jahn <stefan@lkcc.org>
* input.cpp: Transfer references to equation variables in an
analysis property properly into its properties.
* equation.cpp: References to component properties can now also be
found in analysis definitions.
* check_netlist.cpp: Allow certain analysis properties to be
variable references.
2007-05-24 Stefan Jahn <stefan@lkcc.org>
* equation.cpp: Added elementary charge "q" to the constants in
the equation solver.
* differentiate.cpp: Added differentiator for the new vt()
function.
* evaluate.cpp: Added function vt() computing the thermal voltage.
* check_netlist.cpp: Moved subroutine call for checking actions
behind the subcircuit checks in order to allow detecting
non-linearities in subcircuits.
2007-05-17 Stefan Jahn <stefan@lkcc.org>
* hash.cpp: Added count() function to hash. Also added default
hashiterator constructor.
2007-05-15 Stefan Jahn <stefan@lkcc.org>
* input.cpp: Allow variables in substrate properties.
2007-05-05 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: arcosh() and arsech() with real arguments
deliver now complex results.
* complex.cpp: Fixed sqrt() result for Im{z}=+-0.
2007-05-03 Stefan Jahn <stefan@lkcc.org>
* differentiate.cpp: Fixed loads of memory leaks. Added
differentiators for the new limexp() and hypot() functions.
* equation.cpp: Initializing data of a constant in constructors
(valgrind complained about it).
* evaluate.cpp, vector.cpp, complex.cpp: Added xhypot() and
limexp() functions.
* Makefile.am (gperfapphash.gph): Fixed rule considering the
$(EXEEXT) suffix.
2007-05-02 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Using absolute value of complex result in
ifthenelse construct. This yields the same results as if using
absolute arguments for e.g. sqrt() and ln() if these are negative.
Added '!=' and '==' implementations for boolean arguments.
* differentiate.cpp: Introduced new reduction when -1 occurs in
products yielding unary minus then.
2007-04-28 Stefan Jahn <stefan@lkcc.org>
* equation.cpp: Added assignment multiplier and summarizer. New
application constructor taking function name and the number of
arguments. Fixed a fatal bug in setDouble().
* differentiate.cpp: Fixed a big bug in the unary minus
differentiator, or better: the unary minus reducer. Improved the
'?:' differentiator (better reduction). Added differentiator for
the norm() function.
2007-04-27 Stefan Jahn <stefan@lkcc.org>
* scan_netlist.l: Avoid conflict between assignment '=' and the
new '==' operator.
2007-04-26 Stefan Jahn <stefan@lkcc.org>
* differentiate.cpp: Added sinc() differentiator.
* evaluate.cpp: Fixed calculation of arsech(). Using new
functions from complex and vector class.
* parse_netlist.y: Fixed operator precedences.
* evaluate.cpp: Allowing additionally complex arguments in ?:
operator. Necessary for e.g. sqrt().
* equation.cpp: Modified printing functions for logical
operations.
2007-04-25 Stefan Jahn <stefan@lkcc.org>
* differentiate.cpp: Added differentiation for the new '?:'
operation.
* scan_netlist.l, parse_netlist.y: Allowing '?:' operations as
well as <, >, <=, >=, ==, !=, !, && and || in equations.
* evaluate.cpp: Implemented comparison operators as well as some
important boolean operations.
* equation.cpp: Added the boolean data type with all its
implications.
2007-04-24 Stefan Jahn <stefan@lkcc.org>
* differentiate.cpp: Added diferentiation formulas for arsech()
and arcosech(), also added simplifier for immediate square
expressions.
2007-04-23 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Added arcsec(), arccosec(), arsech(), arcosech()
and length() functions to the equation solver.
* vector.cpp: Fixed calculation of variance().
2007-04-18 Stefan Jahn <stefan@lkcc.org>
* qucsdefs.h (qucs_definition_available): Added properties of new
equation defined device.
* input.cpp: Storing appropriate environment pointer in each
instantiated component.
* equation.cpp: Added some more functionality necessary for the
new equation defined device.
* circuit.h (class circuit): Environments can now be stored in
components.
2007-04-15 Stefan Jahn <stefan@lkcc.org>
* qucsdefs.h (qucs_definition_available): Added parameters
for the new exponential current and voltage source.
* vector.cpp: Fixed implementation of variance(). And thereby
the one of stddev().
2007-04-14 Stefan Jahn <stefan@lkcc.org>
* differentiate.h (class differentiate): Added many derivatative
functions. This is preparation towards equation defined devices.
* equation.cpp: Added copy constructors and re-creator functions
for each equation node. Also added basic differentiation
functionality.
2007-04-11 Stefan Jahn <stefan@lkcc.org>
* scan_zvr.l, check_zvr.cpp: Supporting some more data formats of
the ZVR analyser.
2007-04-07 Stefan Jahn <stefan@lkcc.org>
* qucsdefs.h (qucs_definition_available): Updated
parameter ranges of verilog-ams devices.
* check_mdl.cpp: Fixed a variable substitution bug due to
e.g. "- 950.0m" (mark the space).
2007-04-04 Stefan Jahn <stefan@lkcc.org>
* nasolver.cpp: Improved the source-stepping algorithm.
* hbsolver.cpp: Fixed order of frequencies in the multi-
dimensional case. Also added functionality for multi-
dimensional frequency/time transformations.
2007-03-24 Stefan Jahn <stefan@lkcc.org>
* eqnsys.cpp: Some more comments on the SVD diagonalization
process added.
2007-03-21 Stefan Jahn <stefan@lkcc.org>
* equation.cpp: Fixed a bug in the data dependency tracking.
It apparently occurred due o the many changes in the equation
solver.
2007-03-06 Stefan Jahn <stefan@lkcc.org>
* trsolver.cpp: Modifying U*Prev values of non-linear devices
when a time step has been rejected.
2007-03-03 Stefan Jahn <stefan@lkcc.org>
* property.cpp: Deleting vector variable, fixing memory leak.
* check_netlist.cpp: Fixed memory leak for value lists in
component properties.
2007-03-01 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Fixed memory leak.
* equation.cpp: Fixed memory leak when application is evaluated
twice or more times.
* check_netlist.cpp: Fixed a subcircuit expansion bug occurring
when at least 2 subcircuits are expanded at the top of the circuit
list.
2007-02-27 Stefan Jahn <stefan@lkcc.org>
* ucs.cpp (main): Running the new netlist_destroy_env() function.
* check_netlist.cpp (netlist_destroy_env): New function which
can be used to delete the top-level root environment(s).
* environment.cpp: Deleting children in destructor. Deleting
results of variable references. Bugfix: Passing definition list
when running the solver.
2007-02-23 Stefan Jahn <stefan@lkcc.org>
* input.cpp: Fixed a bug regarding substrates which are now
also local to subcircuit environments.
* equation.cpp: Emit appropriate error message if it was
impossible to determine the type of an assignment equation.
If undefined dependencies are found in the equation checker
process; now trying to resolve that dependencies in the
component properties of the netlist.
Fixed a segfault bug when trying to detect variable chain of
an assignment which is actually not cyclic itself but involves
a variable which is cyclic.
* equation.h (class checker): Add a netlist entries to the
equation checker.
* environment.h (class environment): Add a netlist entries to
an environment.
2007-02-22 Stefan Jahn <stefan@lkcc.org>
* environment.cpp: Fixed a bug which was due to the fact that
different environments based on the same subcircuit share the
same equation checker and solver.
2007-02-21 Stefan Jahn <stefan@lkcc.org>
* environment.cpp: Copy variable content if necessary.
* check_netlist.cpp: Don't come across root components twice when
expanding subcircuits.
2007-02-20 Stefan Jahn <stefan@lkcc.org>
* variable.h (class variable): Allowing variables to references
as well.
* variable.cpp (toString): New function which creates a textual
representation of a variable.
* property.cpp: Also allow properties which are references.
* net.cpp: Start equation solver once before each top-level
analysis.
* input.cpp: Ensure that component properties (if variables) are
referenced from the correct environment.
* equation.cpp: Some more functionality especially for double
values/assignments added.
* environment.cpp: The equation solver now updates equation
results and updates references across subcircuit boundaries.
* check_netlist.cpp: Putting subcircuit variables into the
appropriate environment.
2007-02-03 Stefan Jahn <stefan@lkcc.org>
* nasolver.cpp: Fixing probe functionality.
2007-01-30 Stefan Jahn <stefan@lkcc.org>
* ucs.cpp (main): Updated copyright notice.
2006-10-16 Stefan Jahn <stefan@lkcc.org>
* input.cpp: Removed equation checking here. It's now done in
the netlist checker.
* equation.cpp: New function checking if a given variable name
is an equation.
* environment.cpp: Added children functionality for environments.
* check_netlist.cpp: Resolving variables in equations.
Creating a real environment tree. Checking equations in all
subcircuits as well.
2006-10-09 Stefan Jahn <stefan@lkcc.org>
* trsolver.cpp: Fixed a bug in the transient solver occurring
when a components MNA matrix changes during DC and TR (e.g.
transmission line).
2006-09-24 Stefan Jahn <stefan@lkcc.org>
* qucsdefs.h (qucs_definition_available): Added 'MaxStep' as
valid property in transient analysis.
2006-09-19 Stefan Jahn <stefan@lkcc.org>
* check_mdl.cpp: Translating special variable 'PI'. Defaulting
to logarithmic sweep from 1 to 1 if no start/stop can be
determined.
2006-09-18 Stefan Jahn <stefan@lkcc.org>
* ucs.cpp (main): Using new environment functionality in order
to solve the root environment equations.
* input.cpp: Passing the netlist checker its environment.
* evaluate.cpp: Replaced references to static functions of
the solver.
* equation.cpp: Removed all global data concerning the
equations. Both checker and solver are now fully self-contained
and can be instantiated as many as needed. This is one more
step to local equations in subcircuits.
* environment.cpp: Added functionality which enables an
environment to contains equations which can be checked and
solved.
* check_netlist.cpp: Passing equations, their checker and
solver to the root environment.
2006-09-17 Stefan Jahn <stefan@lkcc.org>
* parse_netlist.y, check_netlist.cpp: Preparations to have
equations inside subcircuits.
2006-09-11 Stefan Jahn <stefan@lkcc.org>
* parse_zvr.y, parse_mdl.y (__NOEXTENSIONS__): Added this #define
for MacOSX systems to inhibit symbol clash.
* parse_netlist.y, check_netlist.cpp: Implemented definition of
subcircuit properties in the parser and checker.
2006-09-06 Stefan Jahn <stefan@lkcc.org>
* transient.cpp, integrator.cpp (conductor): Added functionality
calculating the equivalent conductance separately.
* circuit.cpp: Implemented a one-node variant for the function
transientCapacitance(). Also added some variants of this function
which consider the possibility that a charge depends on a
different voltage than where it is located. Then the
transientCapacitance() is split into transientCapacitanceQ() and
transientCapacitanceC().
2006-09-03 Stefan Jahn <stefan@lkcc.org>
* scan_mdl.l, parse_mdl.y: Implemented many more of the MDL
grammar and syntax which I wasn't aware before.
* dataset.cpp: Fixed a bug when deleting the last variable or
dependency in a dataset.
* check_mdl.cpp: Emit warnings when variables cannot be
resolved (no equation solver implemented).
Consider list of root LINK's.
2006-08-19 Stefan Jahn <stefan@lkcc.org>
* qucsdefs.h (qucs_definition_available): Added new
optional properties 'Td', 'Tr' and 'Tf' for rectangular current
and voltage sources.
* parse_mdl.y: Free'ing unused scanner items in the parser.
* dataset.cpp: New function delVariable() implemented.
* check_mdl.cpp: TODO list done: release internal data
structures, checking dependency list of XFORM's checking
SYNC sweeps, handling LIST sweeps correctly.
2006-08-17 Stefan Jahn <stefan@lkcc.org>
* valuelist.cpp: Added new function which can be used to
concatenate two valuelists.
* scan_mdl.l, parse_mdl.y, check_mdl.cpp: Implemented scanner,
parser and checker for the IC-CAP MDL file format. The checker
works, but there is yet something to do...
* dataset.cpp (load_mdl): Included a static function to load
a IC-CAP MDL file as an dataset.
2006-08-08 Stefan Jahn <stefan@lkcc.org>
* parasweep.cpp: Fixed a bug occurring with multi-dimensional
s-parameter sweeps which require a prior dc analysis. Now the
data dependency tracking works again.
* net.cpp: New function returning the children in the last
order sweep.
* evaluate.cpp (__RETV): Using an extra macro for returning
default values (non-argument macros). Some compilers complained
about these (FreeBSD4).
2006-07-23 Stefan Jahn <stefan@lkcc.org>
* nasolution.h (class nasolution): Implemented a storage
class for a nodal analysis solution. Used by the transient
solver.
* vector.cpp: Each two-vector operation, e.g. +, -, polar, *,
/, %, arctan2 and pow can now be performed on vectors with
unequal length as long as the size of the longer vector is
a multiple of the shorter vector.
* valuelist.cpp: Added new clear() function.
* trsolver.cpp: Dealing with new property 'initialDC'
indicating whether an initial DC analysis should be performed
or not. The results of this DC analysis are now also used
as starting values for the successive transient analyses.
This was meant to be implemented, but did not work.
* property.h (class property): New functions setDefault() and
isDefault indicating a property's default value.
* parse_netlist.y: The netlist parser can now skip empty
properties, e.g. k="", and handles it as if it was not
given at all.
* object.cpp: Each object can now indicate whether one of its
properties was actually given in the netlist or if has got its
default value. The addProperty() functions now return the
created property instance.
* nasolver.cpp: Implemented a store/recall mechanismen for
solutions.
* input.cpp: Marking properties which were not given in the
netlist as default values.
2006-07-19 Stefan Jahn <stefan@lkcc.org>
* parse_dataset.y (YYMAXDEPTH): Increased stack size for *very*
big dataset files.
2006-07-16 Stefan Jahn <stefan@lkcc.org>
* scan_zvr.l, parse_zvr.y, check_zvr.cpp: Implemented scanner,
parser and checker for the ZVR data file format.
* dataset.cpp: New functions: delDependency() and load_zvr().
2006-07-02 Stefan Jahn <stefan@lkcc.org>
* matvec.cpp, matrix.cpp: Added scalar additions and
subtractions.
* evaluate.cpp: Added scalar additions and subtractions for
matrices and matrix vectors.
* eqnsys.cpp: Replaced set/get syntax wherever possible to
read A() instead of A->get()/set().
2006-06-22 Stefan Jahn <stefan@lkcc.org>
* trsolver.cpp, dcsolver.cpp: Allowing 'GolubSVD' as solver.
* eqnsys.cpp: Reworked the QR decomposition code. Also added the
first working version of the SVD (both real and complex). More
to come about this code...
* vector.cpp, evaluate.cpp, complex.cpp: Renamed sign() into
signum() and added slightly different sign() function which
returns 1 with zero arguments.
2006-06-06 Stefan Jahn <stefan@lkcc.org>
* parse_touchstone.y: Raised stack limit of parser.
* check_netlist.cpp: Fixed a segfault bug if there is an
wrongly referenced subcircuit.
2006-06-04 Stefan Jahn <stefan@lkcc.org>
* parse_citi.y, scan_citi.l, check_citi.cpp, check_citi.h:
New files implementing the parser, lexer and checker for
CITIfiles.
* dataset.cpp (load_citi): New function which is able to load
a CITIfile into a dataset.
* check_touchstone.cpp: Added touchstone_init() and
touchstone_destroy() functions for use in the converter.
2006-05-22 Stefan Jahn <stefan@lkcc.org>
* fourier.cpp: Fixed wrapper functions fft_1d() and dft_1d().
* evaluate.cpp: Added Time2Freq and Freq2Time implementation.
Fixed those of fft, ifft, dft and idft.
* applications.h: Added new definitions of fft, ifft, dft, idft,
Time2Freq and Freq2Time.
2006-05-15 Stefan Jahn <stefan@lkcc.org>
* complex.cpp: Finally fixed the complex arccos() function.
2006-05-14 Stefan Jahn <stefan@lkcc.org>
* hbsolver.cpp: Added TODO list for the HB solver.
2006-05-11 Stefan Jahn <stefan@lkcc.org>
* qucsdefs.h (qucs_definition_available): Allow diode's 'M'
parameter in the range 0..2.
2006-05-01 Stefan Jahn <stefan@lkcc.org>
* hbsolver.cpp: Fixed calculation of the requested number
of harmonics.
Excitation sources must be shunted by a 100 Ohm resistor in
parallel, not just shunting the ports of the sources to ground.
Dividing constant excitation currents by 2 (except DC),
multiplying balanced current by 2 (except DC) for the final
solution.
The FFT values must be physically interpreted for discrete
frequencies, those divided by the number of complex samples. The
IFFT value are left as is.
* dcsolver.cpp: Running restartDC() for each non-linear circuit
if a fallback algorithm is used to solve the netlist.
* circuit.h (class circuit): Allow non-linear circuits to
re-initialize their DC iteration properly by a restartDC()
callback.
2006-04-27 Stefan Jahn <stefan@lkcc.org>
* hbsolver.cpp: Tried and applied yet another algorithm to
find the final solution of the balanced network. Seems like
working now. Using an extended MNA matrix with the excitation
voltage sources in the matrix as well.
* trsolver.cpp: Activated the 'relaxTSR' option. Can be set to
relax the exact breakpoint (for the requested time step raster)
targeting.
2006-04-26 Stefan Jahn <stefan@lkcc.org>
* hbsolver.cpp: Tried to fix the final solution after
balancing correctly. Not yet working...
* fourier.cpp: Fixed a bug in the FFT routine. Also added
a 1d-FFT and 1d-IFFT for two real valued vectors handled in
a single FFT run.
2006-04-25 Stefan Jahn <stefan@lkcc.org>
* tvector.cpp: Added '*=' and '/=' operators for scalar
arguments.
* hbsolver.cpp: Non-linear equations system is now smoothly
converging for our simple Vac-R-R-Diode example.
2006-04-23 Stefan Jahn <stefan@lkcc.org>
* hbsolver.cpp: Re-implemented the FFT of a matrix using the
block-diagonal property of Jacobians in the time domain.
Extended the termination criteria using the iteration voltages.
* parse_netlist.y: Fixed a small bug occurring when an instance
of a (1) component, (2) action, (3) equation and (4) subcircuit
or (5) a reference to one of these in a property is named like
a physical unit or scale, e.g. V, Hz, A or T.
2006-04-15 Stefan Jahn <stefan@lkcc.org>
* tvector.cpp: New functions: contains() as well as '+=' and '-='
operators.
* tmatrix.cpp: New functions: setCol(), getCol(), setRow(),
getRow(), set(val) as well as '+=' and '-=' operators.
* hbsolver.cpp: Implemented non-linear part of the harmonic
balance as far as possible. All parts of the algorithm addressed
but not yet working...
2006-04-06 Stefan Jahn <stefan@lkcc.org>
* devstates.h (class devstates): New class going to be used
by all non-linear components. Thus it is possible to re-use
a single instance of a non-linear component class for
each required HB frequency.
* hbsolver.cpp: Started to implement the non-linear
functionality in the HB solver.
* circuit.cpp: Prepared matrix and vector entries for
HB analysis.
2006-04-04 Stefan Jahn <stefan@lkcc.org>
* fourier.cpp: Implemented multi-dimensional Fast Fourier
Transformation (also IFFT).
2006-04-03 Stefan Jahn <stefan@lkcc.org>
* hbsolver.cpp: Linear HB seems to work now. Tests needed...
* parse_netlist.y: Also allow scales and units as node
identifiers.
2006-03-28 Stefan Jahn <stefan@lkcc.org>
* strlist.cpp, ptrlist.cpp: Added a default constructor.
* hbsolver.cpp: Some more work on the linear solver for
harmonic balance done...
2006-03-26 Stefan Jahn <stefan@lkcc.org>
* strlist.h (class strlistiterator): New iterator class.
* ptrlist.h (class ptrlistiterator): New iterator class.
* hbsolver.cpp: Implemented large parts of the linear
network handling.
2006-03-23 Stefan Jahn <stefan@lkcc.org>
* strlist.h (class strlist): New functions: last() and
first().
* input.cpp: Handle zero-length value lists properly.
* equation.cpp: Handle drop/prep dependencies properly.
Fixed a bug due to improved passing of these dependencies.
Detect errors during evaluation of generated variables.
* check_netlist.cpp: Allow zero-length value lists in
properties. For lists 'value' and '[value; ...]' and '[]'
are possible handled correctly now.
2006-03-21 Stefan Jahn <stefan@lkcc.org>
* complex.cpp: Fixed arccos() implementation.
* hbsolver.cpp: Collecting the harmonics works now, also
splitting the network into linear and non-linear part. Now
having nodes of linear and non-linear parts as well as the
nodes which need to be balanced.
2006-03-18 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Fixed rad2deg() and deg2rad() for complex
arguments. Using asin() and acos() from math library.
* equation.cpp: Fixed segfault bug when not all equations
can be solved.
2006-03-14 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: New function: kbd (Kaiser-Bessel derived
window).
* precision.c (precinit): Added core's idea of NaN.
* evaluate.cpp: Added erfcinv() function.
* applications.h: Renamed yn to bessely, jn to besselj and
i0 to besseli0.
2006-03-13 Stefan Jahn <stefan@lkcc.org>
* Makefile.am (libqucsator_a_SOURCES): Moved 'precision.c'
into the libqucsator library.
* evaluate.cpp: Added erfinv(), i0() and one-argument dbm()
functions to the equation solver.
2006-03-12 Stefan Jahn <stefan@lkcc.org>
* fspecial.h: Implementation of fallback functions for
erf, erfc and round (Win32). Also added some elliptic
integral functions.
* applications.h: Again many new functions for equation
solver added.
2006-03-09 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Loads of new functions in the equation solver.
2006-03-05 Stefan Jahn <stefan@lkcc.org>
* scan_dataset.l: Allow matrix entry spcecification, e.g.
S[1,1], as data variable identifiers.
* parse_dataset.y (YYMAXDEPTH): Increased stack size for large
datasets.
2006-02-23 Stefan Jahn <stefan@lkcc.org>
* trsolver.cpp: Fixed some memory leaks in the transient
analysis solver.
2006-02-22 Stefan Jahn <stefan@lkcc.org>
* history.cpp: Using interpolation on request. This means
some more effort while getting values from the history, but
speeds up simulation because of better convergence.
* spline.h (class spline): Made spline class ready to use for
tvectors as well.
2006-02-20 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Fixed return value of max_r() in case of an
error.
* equation.cpp: Implemented some data dependency functionality
for intermediate values in equations.
2006-02-19 Stefan Jahn <stefan@lkcc.org>
* circuit.cpp: Implemented history lookup functions for
node voltages and branch currents.
* trsolver.cpp: Added history for components which require
it during transient analysis.
* history.h (class history): New class implementing a history
of values for the transient analysis.
2006-02-16 Stefan Jahn <stefan@lkcc.org>
* Many changes for g++-4.1 errors (-ffriend-injections).
2006-02-06 Stefan Jahn <stefan@lkcc.org>
* parse_netlist.y: Allowing real expressions in range
specifications.
* scan_netlist.l: Had to revert acceptance of signed real
values. Grammar wouldn't even work for "1+1"... Now implemented
ranges in the right way.
2006-02-05 Stefan Jahn <stefan@lkcc.org>
* nasolver.cpp: Implemented possibility to save probe data
into the current dataset.
* dataset.cpp (load_touchstone): Fixed segfault bug when two
or more S-parameter touchstone file containers are to be
simulated.
* scan_netlist.l: Accepting signed real values in equations.
This saves some computation effort.
* parse_netlist.y: The equation parser (part of netlist
parser) now creates an appropriate range instance.
* range.h (class range): New class implementing a value
range including upper and lower boundary specifications.
* evaluate.cpp: Implemented new functions: xvalue(), yvalue()
and min(), max() and avg() using range specification.
* equation.cpp: Added new function returning a data vector
from th dataset according to the given name.
2006-01-29 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Moved saveVariable() to analysis class.
(saveCharacteristics): Saving characteristic values into
dataset. New properties: saveCVs, saveAll.
* object.cpp: getScaledProperty() falls back to
getPropertyDouble() if there is no such scaled property.
* nasolver.cpp: Moved saveVariable() to analysis class.
* circuit.cpp: Implemented necessary functions for the
characteristic values.
* characteristic.h (class characteristic): New class for
storing characteristic values (very likely operating points).
* analysis.cpp (saveVariable): Moved this function from the
nasolver and spsolver class here.
2006-01-08 Stefan Jahn <stefan@lkcc.org>
* pair.h (class pair): New class implementing a key/value
pair.
* operatingpoint.cpp: Simplified the operating point class
accordingly.
* circuit.cpp: Using the new valuelist class to manage
operating points of components.
* valuelist.h (class valuelist): New template class
implementing a key/value list.
2005-12-18 Stefan Jahn <stefan@lkcc.org>
* qucsdefs.h (qucs_definition_available): Added temperature
and area parameters for jfet, bjt and mosfet devices.
2005-12-11 Stefan Jahn <stefan@lkcc.org>
* object.cpp: Introduced getScaledProperty() and
setScaledProperty() functions for scalability of device
models.
* ucs.cpp (main): New command line option --gui enabling
the special progressbar for the GUI.
* logging.c: Implemented new progressbar for GUI.
* check_touchstone.cpp (ZREF): Removed dependency from
circuit class.
* hash.h (class hashiterator): Implemented hash iterator
class. Also made the hash and hashiterator classes templates.
2005-12-06 Stefan Jahn <stefan@lkcc.org>
* equation.cpp: Using the 'gperf' output function in order to
lookup evaluator functions and return types. This improves the
speed about a factor thousand for our 400 functions implemented
up to now. I really like gperf.
2005-12-04 Stefan Jahn <stefan@lkcc.org>
* hash.h (class hash): Implemented a simple hash functionality
for use within the simulator.
* Makefile.am (gperfappgen_SOURCES): Added rules for perfect
hash functionality of evaluator applications.
2005-11-12 Stefan Jahn <stefan@lkcc.org>
* precision.c (precinit): New file containing initialization
of math constants.
2005-10-29 Stefan Jahn <stefan@lkcc.org>
* check_netlist.cpp: Skip range test if a property is assigned
by a (sweep) variable.
* precision.h: Improved --enable-double behaviour by
introducing double representation dependent precision
constants.
2005-10-27 Stefan Jahn <stefan@lkcc.org>
* parse_netlist.y: Fixed smaller memory leaks in the netlist
parser.
* vector.cpp, equation.cpp, evaluate.cpp, net.cpp: Fixed loads
of memory leaks.
* environment.cpp: Fixed memory leak (deleting substrates
and constants).
* dataset.cpp (load_touchstone), check_touchstone.cpp: Fixed
scanner memory leak.
* check_netlist.cpp (netlist_destroy): Calling
netlist_lex_destroy() fixes a memory leak in the netlist
scanner.
2005-10-26 Stefan Jahn <stefan@lkcc.org>
* vector.cpp: New constructor taking size and content (constant
value). Implemented rtoy() and ytor() functions.
* trsolver.cpp: Implemented delta correction in order to hit
exact breakpoint if possible.
* matvec.cpp: Implemented stos() functionality. Allow passing
reference impedance vectors to stoz(), ztos(), stoy() and ytos()
functions as well as to stos().
* matrix.cpp: Allow passing reference impedance vectors to
stoz(), ztos(), stoy() and ytos() functions as well as to
stos(). Fixed calculation formulas for complex reference
impedances according to the manual.
* evaluate.cpp: Implemented ytor() and rtoy() functions. Added
optional reference impedances for ztor(), rtoz(), ytor() and
rtoy() functions. Allow additional argument for stoz(), ztos(),
stoy() and ytos() functions. Employ stos() functionality.
* complex.cpp: Added ytor() and rtoy() functions with complex
reference impedances. Allow complex reference impedances in
ztor() and rtoz() functions.
2005-10-20 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Added dft() and idft() functions to the
equation solver.
* fourier.cpp: Implemented (inversve) discrete fourier
transformations.
* acsolver.cpp: Always output absolute noise value (no
negative noise currents/voltages).
* parse_touchstone.y: Accept and warn about a missing trailing
end-of-line character in touchstone file.
2005-10-16 Stefan Jahn <stefan@lkcc.org>
* equation.cpp: Implemented inheritance of 'dropdeps' property
and the 'prepdeps' entries. Also allowing the use of auto-
generated variables in equations, e.g. 'Frequency.0001'.
* fourier.h (class fourier): Implemented 1-dimensional fast
fourier transformation.
* evaluate.cpp: Added 'fft' (Fast Fourier Transformation)
function.
* spline.cpp: Completed periodic cubic spline calculations.
2005-10-04 Stefan Jahn <stefan@lkcc.org>
* nasolver.cpp: Fixed noise correlation matrix entry
collector (buggy due to new correlation sources).
2005-10-02 Stefan Jahn <stefan@lkcc.org>
* check_netlist.cpp: Property range specification now also
including interval boundary conditions.
2005-09-25 Stefan Jahn <stefan@lkcc.org>
* transient.cpp, trsolver.cpp: Fixed forward/backward Euler
method remarks.
2005-07-18 Stefan Jahn <stefan@lkcc.org>
* qucsdefs.h (qucs_definition_available): Allowing negative
length of ideal transmission line.
2005-07-03 Stefan Jahn <stefan@lkcc.org>
* check_netlist.cpp: Fixed a bug occurring when S-parameter
file container is used in subcircuits.
2005-06-26 Stefan Jahn <stefan@lkcc.org>
* tvector.cpp: Added setData() function in order to assign
external data (sub)vector to a tvector.
2005-06-19 Stefan Jahn <stefan@lkcc.org>
* tridiag.h (class tridiag): New class implementing solution of
tridiagonal (symmetric/non-symmetric and cyclic/non-cyclic)
equation systems. The cyclic matrices are going to be used for
periodic cubic splines.
2005-06-06 Stefan Jahn <stefan@lkcc.org>
* vector.cpp: New unwrap() function implemented.
* evaluate.cpp: Added unwrap(), rad2deg() and deg2rad()
functions.
2005-05-21 Stefan Jahn <stefan@lkcc.org>
* spline.h (class spline): Cubic spline class. Generates
spline coeeficients from data vectors. Very useful for
interpolations.
* poly.h (class poly): New polynom class defined by function
value and the derivatives.
* evaluate.cpp: Added interpolation functions.
2005-05-16 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Fixed circle formulas (off by one index
errors).
* nasolver.cpp: Fixed left-over bug in AC noise matrix
creation (indexing, off by one).
2005-05-09 Stefan Jahn <stefan@lkcc.org>
* scan_netlist.l: Removed 'unistd' option from all scanners
files (scan_*.l).
2005-05-02 Stefan Jahn <stefan@lkcc.org>
* tvector.cpp: Improved norm() calculation.
* qucsdefs.h (qucs_definition_available): Fixed number of
ports for coplanar open and short.
* matrix.cpp: Made twoport() transformations work on matrices
with >= (2,2) dimensions.
* evaluate.cpp: Fixed PlotVs() implementations.
2005-04-25 Stefan Jahn <stefan@lkcc.org>
* matrix.cpp, tmatrix.cpp: Fixed yet another memory leak.
Thanks to Brendan for pointing this out.
* eqnsys.cpp: Fixed memory leaks as well as ANSI-C++ compile
warning of Borland C.
2005-04-23 Stefan Jahn <stefan@lkcc.org>
* vector.h (class vector), matrix.h (class matrix): Added the
'()' accessors.
* dcsolver.cpp (saveOperatingPoints): Calling the function
for non-linear circuits.
* circuit.h (class circuit): New virtual function for saving
the DC operating points (branch currents and node voltages).
2005-04-19 Stefan Jahn <stefan@lkcc.org>
* complex.cpp: Using xhypot() in abs() calculation for better
numerical stability.
2005-04-17 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Added convenience functions for all the
circle functionality: GaCircle(S,Ga[,Arcs]) - Ga can be
either vector or number, Arcs can be vector (angles in
degree), number (number of equally spaced circle segments)
or be omitted (the number defaults to 64).
* sweep.cpp: Using the linspace/logspace functions of the
vector class.
* vector.cpp (logspace, linspace): Added these functions
for convenience here.
* matvec.cpp, matrix.cpp (rollet): Moved these functions from
the equation solver to the matrix and matvec class.
* evaluate.cpp: Speed up noise circle calculations. Added
gain circle and PlotVs() applications.
* equation.cpp: It's now possible to generate independent
data vectors on the fly. Useful for circle functions and
PlotVs().
2005-04-14 Stefan Jahn <stefan@lkcc.org>
* matvec.cpp, matrix.cpp (twoport): Check size of matrices
to be at least >= 2 for twoport operations instead of
exactly 2.
* evaluate.cpp: Improved some error messages.
* eqnsys.cpp: Reduced memory consumption of LU substitution
routines (Doolittle and Crout) by using in-place code.
(substitute_qr_householder_ls): Improved numeric stability of
QR solver. Now it's possible to use both the QR and LQ solver
for equation systems.
* check_netlist.cpp: Added 'Solver' property to transient and
dc analysis.
2005-04-12 Stefan Jahn <stefan@lkcc.org>
* eqnsys.cpp (substitute_qr_householder_ls): Implemented least
square solution of under-determined equation systems using
QR decomposition.
2005-04-09 Stefan Jahn <stefan@lkcc.org>
* tvector.h (class tvector), tmatrix.h (class tmatrix):
Added the () accessors for better readability of the code.
* logging.c: For performance's sake optimizing progressbar
output for simulations with large amount of points.
* eqnsys.cpp: Avoid numerous allocations/deallocations if the
matrices' size does not change.
(euclidiaCol): Using an algorithm without destructive underflow
or overflow.
(solve_qr): Having now two working variants of the QR
decomposition solver. Both now using column pivoting and working
for real and complex equation systems.
* complex.cpp: Implemented xhypot() functions for complex and
real arguments using an algorithm without destructive underflow
or overflow.
* check_netlist.cpp: Improved error message.
2005-04-06 Stefan Jahn <stefan@lkcc.org>
* eqnsys.cpp: Added Doolittle's LU factorization. Just for
completeness. Implemented new preliminary QR solver. The
functionality is given (really solves equation systems), but
pivoting, numerical over/underflow and solution of singular
matrices is still missing...
* consts.h (M_SQRT1_2): Added 'M_SQRT1_2' constant.
2005-03-31 Stefan Jahn <stefan@lkcc.org>
* eqnsys.cpp: Split LU factorization from LU solver and also
fixed a bug in the LU decomposition. Using implicit pivoting.
* acsolver.cpp (solve_noise): Using LU factorization only
instead of full LU solver for initial transposed matrix
decomposition.
2005-03-26 Stefan Jahn <stefan@lkcc.org>
* vector.cpp: New functions: contains() and sort().
* qucsdefs.h (qucs_definition_available): Added HB item.
* complex.cpp: Added < and > operators.
* hbsolver.h, hbsolver.cpp: Started to implement the
harmonic balance solver. Not yet working at all, just
some preparations.
2005-03-16 Stefan Jahn <stefan@lkcc.org>
* Makefile.am: Avoid re-generation of flex/bison files
when not in maintainer mode.
2005-03-13 Stefan Jahn <stefan@lkcc.org>
* net.cpp: Fixed a bug occurring when the users specifies
a setup requiring an extra DC analysis in the main sweep.
* ptrlist.cpp: New template class for lists of pointers.
2005-03-10 Stefan Jahn <stefan@lkcc.org>
* strlist.cpp: New helper functions to add/append whole
string lists.
* qucsdefs.h (qucs_definition_available): Added optional
'Temp' parameter to the 'Pac' and 'MCOUPLED' components.
* evaluate.cpp: Implemented a 'linspace' function as well
as stability circles and noise circles.
* equation.cpp: Evaluators can now add new data dependencies
to their results.
2005-02-27 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp (THROW_MATH_EXCEPTION): Made this macro
compatible with non-ISOC99 compilers.
2005-02-21 Stefan Jahn <stefan@lkcc.org>
* acsolver.cpp (solve_noise): Hopefully fixed AC noise
analysis. Nase voll, Faxen dicke, jetze.
2005-02-19 Stefan Jahn <stefan@lkcc.org>
* trsolver.cpp: The transient solver can now tell its
integrators to be in certain states. Thus its initial
run can be indicated. Also the initial conditions (nodesets)
are now correctly evaluated.
* integrator.cpp (integrate): New integration wrapper
able to evaluate a state flag. Currently used for initial
transient analysis run.
2005-02-16 Stefan Jahn <stefan@lkcc.org>
* dcsolver.cpp: If a preferred convergence algorithm is
requested skip this one in the fallback list.
2005-02-13 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp (applications): Added stability factor equations.
Available as Rollet(), Mu() and Mu2().
2005-02-12 Stefan Jahn <stefan@lkcc.org>
* nasolver.cpp: New function able to reorder vectors according
to the pivot exchange table during LU decomposition.
Also enhanced the creation of the noise current correlation
matrix to work with additional noise voltage sources.
* circuit.cpp: Enhanced noise matrices to work with
additional (augmented) MNA matrices.
* acsolver.cpp (solve_noise): Made voltage sources working
with the AC noise algorithm. Possible we get noise currents
correctly now?
2005-02-10 Stefan Jahn <stefan@lkcc.org>
* acsolver.cpp (solve_noise): Finally made the AC noise
analysis work using the Doolittle substitutions of the
transposed Crout LU matrix.
* eqnsys.cpp: Two new functions performing the forward and
backward substitutions of an LU decomposed matrix (Crout and
Doolittle definitions).
2005-02-05 Stefan Jahn <stefan@lkcc.org>
* Made loads of tiny changes for compatibility with the
M$ Visual C++ compiler.
2005-01-31 Stefan Jahn <stefan@lkcc.org>
* nasolver.cpp: Fixed a bug in the nasolver. If the solver
object changed its number of nodes or voltage sources the
matrices are now adjusted appropriately.
* eqnsys.cpp: The equation system solver now works on a
reference of the given matrix. Thus the nasolver can modify
the matrix from the outside (needed during AC noise analysis).
Also the change saves a lot of memory.
2005-01-30 Stefan Jahn <stefan@lkcc.org>
* acsolver.cpp (solve_noise): Fixed bug invalidating the usual
AC results when computing the AC noise results.
(solve_noise): Ensuring real values during noise voltage
computation.
2005-01-23 Stefan Jahn <stefan@lkcc.org>
* tvector.cpp: Some new 'set()' functionality added. Computation
of scalar product of two vectors added. New 'conj()' operation.
* tmatrix.cpp: New 'vector * matrix' function. New transpose()
function.
* nasolver.cpp: Added functionality for the creation of a noise
correlation matrix. New function returning the number voltage
sources. Saving of node voltages (or branch currents) only if a
valid postfix is given.
* acsolver.cpp (solve_noise): Implemented preliminary AC noise
analyses. To be tested...
2005-01-16 Stefan Jahn <stefan@lkcc.org>
* parse_netlist.y: Also allow scales and units in parameter
list values.
* circuit.h (class circuit): Prepared AC noise analysis
callbacks. Changed all callers.
* check_netlist.cpp: Evaluating scales in parameter list
values.
2004-12-19 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Introduced two more speed/memory
optimizations: Usage of cross connectors and dedicated ground
circuits. The cross connectors reduce the number of necessary
tees and the grounds reduce the ground network (consisting
of lots of tees and crosses).
* nodelist.cpp: Fixed sorting criteria functions for sorted
S-parameter nodelist.
2004-12-14 Stefan Jahn <stefan@lkcc.org>
* qucsdefs.h (qucs_definition_available): Added the CLIN
(coplanar line) component to the list of available components.
Also added 'Bv' and 'Ibv' properties to diode model.
2004-12-07 Stefan Jahn <stefan@lkcc.org>
* qucsdefs.h (qucs_definition_available): Added new device
parameter for the MOSFET: capModel.
2004-12-06 Stefan Jahn <stefan@lkcc.org>
* qucsdefs.h (qucs_definition_available): Permitted zero
impedance for AC power source.
* equation.cpp: Fixed null pointer bug in dataset vector length
computation.
* scan_netlist.l: Added special tokens for the new list of
values.
* qucsdefs.h (qucs_definition_available): Added 'Values' to
optional properties of 'AC', 'SP' and 'SW' actions.
* property.cpp: A property can now also be a vector of values.
* parse_netlist.y: Accept value lists as property values.
Also removed 'node_root' and 'pair_root' helpers (not necessary
anymore).
* object.cpp: New function returning a vector being property
of an object.
* input.cpp: Added possibility to pass vectors as properties
to analysis objects.
* check_netlist.cpp: Implemented checks for the new sweep types
'list' and 'const'. Allowing these types in parameter sweeps,
ac-analysis and s-parameter analysis.
* analysis.cpp (createSweep): New function creating a sweep
object depending on the analysis's properties. Changed all
possible callers (spsolver, acsolver, parasweep and trsolver)
to use this functionality.
2004-12-02 Stefan Jahn <stefan@lkcc.org>
* net.cpp: Added new function returning the number of non-linear
circuits within the netlist.
* nasolver.cpp: Implemented new convergence helper: the source-
stepper. New function added returning a textual description of
the currently used convergence helper.
Fixed yet another BIG bug in the MNA solver template occurring
when e.g. two or more nodes of a component are connected to each
other.
* dcsolver.cpp: Added new solver property 'convHelper'
determining the preferred convergence helper.
Using the linear solver if the applied circuit description
consists of linear components only.
2004-11-30 Stefan Jahn <stefan@lkcc.org>
* scan_dataset.l: Fixed identifier expression to adapt the
dataset loader to new variables containing one or more '.'.
* nodelist.cpp: Fixed detection of internal nodes. If *any*
of the nodes in a nodelist entry is marked internal, then the
node is made internal.
* check_dataset.cpp (dataset_check): Fixed variable data size
computation for multiple dependencies.
2004-11-28 Stefan Jahn <stefan@lkcc.org>
* equation.cpp: Allowing multiple types of arguments which must
be checked by the actual evaluation function.
* strlist.cpp: New function del() which deletes the each entry
in the given string list from the string list object.
* parse_netlist.y: Allowing array/vector indices specifying
whole ranges of identifiers, e.g. 'array[:,1]'.
* nasolver.cpp: Implemented optional gMin-stepper as
convergence helper for non-linear networks.
* matvec.cpp: Implemented the following new operations:
matvec/matrix plus, matvec/matrix minus, unary minus, scaling
with doubles and vectors, matvec/matrix multiplication, det(),
inverse(), conj(), abs(), arg(), real(), imag(), adjoint().
* matrix.cpp: Added the following operations: unary minus,
abs(), arg(), real() and imag().
* evaluate.cpp (THROW_MATH_EXCEPTION): The evaluator functions
can now throw math exceptions.
(MAKE_FUNC_DEFINITION_1): Added new macro simplifying another
type of functions.
Added more basic operations like '*', '+', '-' for the matrix
and matrix vector types.
Added conj(), phase(), arg(), inverse(), transpose(), det(),
eye() and adjoint() functionality for matrices and matrix
vectors to the list of available functions.
* equation.h: New constant tag 'RANGE' added.
* equation.cpp: The evaluation function can now throw math
exceptions which are appropriately handled.
Added some more functionality to the equation solver allowing
to calculate the data entry lengths of equation nodes.
During export of the dataset it is now possible to remove
data dependencies from output vectors.
* complex.cpp: Added convenience function imag() for double
values.
* check_netlist.cpp: Implemented checks for the nodeset
functionality detecting duplicate and useless nodesets.
2004-11-23 Stefan Jahn <stefan@lkcc.org>
* dcsolver.cpp: Implemented fallback variants for the
non-linear DC analysis which fail initially.
* circuit.cpp: Made all of the MNA matrices of dynamic size.
Thus with a small overhead of code memory consumption is much
better. Changed all callers/users (i.e. each component).
* ucs.cpp (main): New command line option --check which
can be used to verify an input netlist to be checked but
not evaluated (simulated).
* parse_netlist.y: Fixed bug in netlist parser caused by
empty lines in subcircuit definitions.
(YYMAXDEPTH): Increased maximum parser stack size.
2004-11-22 Stefan Jahn <stefan@lkcc.org>
* input.cpp: The netlist factory now removes the definitions
its output was based upon immediately. Thus it is possible to
handle even large netlists on systems with 'limited' memory.
* check_netlist.cpp: Implemented a new function which is
able to unchain and destroy a definition from the list of
definitions.
2004-11-10 Stefan Jahn <stefan@lkcc.org>
* qucsdefs.h (qucs_definition_available): Made the OpAmp a
non-linear component. Changed diameter parameter of MVIA from
'd' to 'D'.
* input.cpp: Enabled opamp and amplifier in the component
creator.
2004-10-29 Stefan Jahn <stefan@lkcc.org>
* netdefs.h, qucsdefs.h: Two new files generalizing netlist
handling (for new converter program).
2004-10-27 Stefan Jahn <stefan@lkcc.org>
* nasolver.cpp: New 'steepest descent' convergence helper
implemented. Seems like working fine...
* tvector.cpp: Implemented new element-wise *, scalar +/-,
comparisons and sum() operators.
* complex.cpp: Added <= and >= operators.
2004-10-25 Stefan Jahn <stefan@lkcc.org>
* dcsolver.cpp, trsolver.cpp: Using new nodeset functionality.
* net.cpp: Added the appropriate nodeset functionality.
* nasolver.cpp: Added function which can save the nodeset list
of the netlist into the component nodes.
* input.cpp: Creating nodesets in the component factory and
adding them to the netlist.
* nodeset.h (class nodeset): Implemented base class for
nodeset functionality.
* tmatrix.cpp: New function isFinite() implemented.
* nodelist.cpp: Created array of nodes for faster access
to enumerated nodes.
* nasolver.cpp: Fixpoint iterations possible.
* eqnsys.cpp: Implemented code for consecutive solutions
of equation systems using LU decomposition.
2004-10-23 Stefan Jahn <stefan@lkcc.org>
* matvec.cpp: Fixed bug in copy constructor.
2004-10-21 Stefan Jahn <stefan@lkcc.org>
* tmatrix.h (class tmatrix), tvector.h (class tvector): Fixed
template functionality to be ISO C++ compliant.
* trsolver.cpp: Using line search fallback if the initial DC
analysis failed to converge.
* matvec.cpp: Fixed compiler (gcc 3.4.2) error in constructor
and copy constructor.
2004-10-19 Stefan Jahn <stefan@lkcc.org>
* circuit.cpp (transientCapacitance): Fixed compiler warning.
2004-10-17 Stefan Jahn <stefan@lkcc.org>
* trsolver.cpp: Run inititialization routine also for created
circuits.
2004-10-16 Stefan Jahn <stefan@lkcc.org>
* circuit.cpp (transientCapacitance): Readjusted the code for
a single integration step for controlled capacitances.
2004-10-14 Stefan Jahn <stefan@lkcc.org>
* tvector.cpp: New function isFinite() implemented.
* trsolver.cpp: Now transient analysis also uses variable order
step control.
Checking for singularity of Jacobian matrix.
* nasolver.cpp: Yet another bug fix in the line searcher.
* eqnsys.cpp: Using a macro LU_FAILURE to control exception
behaviour.
2004-10-13 Stefan Jahn <stefan@lkcc.org>
* tvector.cpp: New function maxnorm() implemented.
* nasolver.cpp (applyAttenuation): Using new tvector abilities.
Fixed lineSearch algorithm.
* evaluate.cpp: New sign() and sinc() functions. Also
simplified some function definitions using a macro.
* vector.cpp, complex.cpp: Added sign() and sinc() functions.
2004-10-12 Stefan Jahn <stefan@lkcc.org>
* evaluate.cpp: Added sec(), cosec(), sech() an cosech()
functions.
* vector.cpp: Found out that class& return values create
memory leaks. That is why classes changed: vector, matrix,
matvec, tmatrix and *all* the callers.
* tvector.h (class tvector): New class implementing a simple
vector template. This change speeds up equation system
solvers and thereby DC, AC and transient simulation. Changed
all callers.
* trsolver.cpp: Tried to optimize non-convergence handling.
2004-10-10 Stefan Jahn <stefan@lkcc.org>
* trsolver.cpp: Fixed all predictors (off-by-one indexing into
the array of time-steps).
2004-10-09 Stefan Jahn <stefan@lkcc.org>
* trsolver.cpp: Respond to non-convergence problems by
starting damped NR iterations.
* nasolver.cpp: Started to implement damped Newton-Raphson
algorithms (limiting schemes).
2004-10-08 Stefan Jahn <stefan@lkcc.org>
* nasolver.cpp: Fixed a bug occurring when ports of a
component with built-in voltage sources were shorted.
* trsolver.cpp: Collecting some statistical data for evaluating
various integration methods, i.e. rejected time-steps, average
time-step and average Newton-Raphson iterations per step.
Consider convergence failure for each taken step (reduce step
then).
Implemented explicit Gear predictor integration method.
* transient.cpp: Implemented variable-step explicit Gear
coefficients. Fixed error constants for explicit Gear method.
2004-10-07 Stefan Jahn <stefan@lkcc.org>
* transient.cpp: Implemented variable-step Gear coefficients.
* trsolver.cpp: Implemented predictive integration methods,
i.e Adams-Bashford and backward Euler.
Using Milne's estimate formula for the local truncation error
controlling the current time-step.
Using 'LTEreltol', 'LTEabstol' and 'LTEfactor' properties for
the acceptable local truncation error.
* transient.cpp: Implemented some functionality regarding the
predictor types and orders. Also added the error constants for
each integration method.
2004-10-06 Stefan Jahn <stefan@lkcc.org>
* scan_netlist.l: Added string and character constant tokens
for the parser.
* property.cpp: If a property is a variable it may now also
contain a reference to a string which is now also properly
returned.
* parse_netlist.y: Allowing string and character constants
within equations.
* evaluate.cpp: Implemented basic string operations like
indexing a certain character and concatenation. Also
added the twoport() functionality.
* equation.cpp: Allowing characters and strings to be equation
variables.
2004-10-03 Stefan Jahn <stefan@lkcc.org>
* nasolver.cpp: Using circuit flags in order to determine
real voltage and current sources.
* circuit.h (class circuit): Put some of the integers
representing flags only into a single integer.
2004-09-29 Stefan Jahn <stefan@lkcc.org>
* equation.cpp: Speed optimization for generating vector
string representation.
2004-09-25 Stefan Jahn <stefan@lkcc.org>
* circuit.cpp (transientCapacitance): Implemented transient
analysis helper for voltage controlled capacitances.
2004-09-23 Stefan Jahn <stefan@lkcc.org>
* eqnsys.cpp: Pass singular matrix to the nasolver via
exception but insert a virtual resistance and continue.
2004-09-22 Stefan Jahn <stefan@lkcc.org>
* states.cpp (saveState): New function saving a certain state
into given pointer location.
2004-09-18 Stefan Jahn <stefan@lkcc.org>
* transient.cpp: Implemented Adams-Moulton (corrector)
integration method and computation of Adams-Bashford (predictor)
coefficients.
(integratorType): Using now numerical identifiers for the
integration methods. Changed all callers.
2004-09-17 Stefan Jahn <stefan@lkcc.org>
* trsolver.cpp: Just enabled the timestep algorithm... seems
to work now.
* trsolver.cpp: Added predictor/corrector functionality. The
transient analysis works now for simple RCL networks with
constant timesteps.
* nasolver.h (class nasolver): Added a real calculate()
callback in order to allow simulation types derived from
the nasolver class to switch the calculator. Changed
callers dcsolver, acsolver and trsolver.
2004-09-14 Stefan Jahn <stefan@lkcc.org>
* trsolver.cpp: Tried to fix timestep adaption... not yet
successfully.
2004-09-13 Stefan Jahn <stefan@lkcc.org>
* nasolver.cpp: Now also saving currents through voltage
sources into each circuit.
* circuit.cpp: Made solutions of branch currents (J-MNA matrix)
available to circuit components.
2004-09-12 Stefan Jahn <stefan@lkcc.org>
* states.h (class states): New class to reuse save-state
variables in the transient solver itself.
* trsolver.cpp (checkDelta): Started to implement the timestep
adjuster for the transient analysis.
* integrator.h (class integrator): New class containing all
of the integration specific things of a circuit object. The
circuit object now also inherits the integrator class.
* circuit.h (class circuit): Removed the analysis argument
of the init() functionality of each type of analysis. Changed
all circuit objects.
2004-09-11 Stefan Jahn <stefan@lkcc.org>
* trsolver.cpp: Started to implement the actual solver. For
now only linear components are supported and no integration
step adaption is made.
* check_netlist.cpp (definition_available): Added the transient
analysis to the list of known netlist definitions.
* circuit.h (class circuit): Added the functionality necessary
for the transient analysis. These are save-state variables and
the integration methods.
* transient.cpp: Implemented Gear, Euler and trapezoidal
integration methods.
* transient.h (class transient): New class implementing some
transient analysis helpers.
2004-09-10 Stefan Jahn <stefan@lkcc.org>
* trsolver.h, trsolver.cpp (class trsolver): New files. Some
basic preparations for the transient simulation.
2004-09-09 Stefan Jahn <stefan@lkcc.org>
* dcsolver.cpp: New simulation property 'saveAll' used to
prevent saving all nodes and operating points when subcircuits
are in place.
2004-09-07 Stefan Jahn <stefan@lkcc.org>
* circuit.cpp (voltageSource): New helper function setting
up an internal voltage source for the MNA.
2004-09-06 Stefan Jahn <stefan@lkcc.org>
* acsolver.h (class acsolver): New class implementing
the AC simulation.
* eqnsys.h (class eqnsys): Made this class a template
using the tmatrix template. Thus the DC analysis runs
twice as fast (using <nr_double_t> instead of <complex>
values) and the solvers can also used by other types of
simulations.
* complex.h (class complex): Added abs(), norm() and real()
for real arguments as well. Thus they can be used by the
tmatrix template.
* circuit.cpp: Bigger code cleanups and better documentation
for some basic circuit functionality.
* nasolver.h (class nasolver): New class implementing the
modified nodal analysis code. Thus it may be used by other
simulation (e.g. AC and transient) as well.
* dcsolver.cpp: Cleaned up the DC solver code using the new
nasolver class.
2004-09-01 Stefan Jahn <stefan@lkcc.org>
* vector.cpp: Implemented numerical differentiation of
vectors.
2004-08-30 Stefan Jahn <stefan@lkcc.org>
* ucs.cpp (main): Fixed bug when using the '-b' command
line parameter. Added help text concerning the option.
2004-08-22 Stefan Jahn <stefan@lkcc.org>
* eqnsys.cpp: Including 'ieeefp.h' if necessary.
2004-08-21 Stefan Jahn <stefan@lkcc.org>
* consts.h: New file. Split 'constants.h' into 'constants.h'
and 'consts.h'. Moved these file up one directory.
* ucs.cpp (main): Checking for command line option '-b'
which enables progress bar functionality.
* spsolver.cpp: Using progress bar if requested.
* scan_netlist.l: Using strrchr() instead of rindex() for
compatibility with native Win32.
* matvec.cpp: Using strchr() instead of index() for
compatibility with native Win32.
* logging.c: Implemented text based progress bar
functionality.
* eqnsys.cpp (finite): Ensure MinGW knows about that macro.
2004-08-18 Stefan Jahn <stefan@lkcc.org>
* nodelist.cpp: Improved memory management for nodelist
entries.
* sweep.cpp: Fixed error due to numerical problems in a
linear sweep containing a real zero point.
2004-08-17 Stefan Jahn <stefan@lkcc.org>
* matvec.cpp: Added matrix conversion routines to matrix
vector class.
* evaluate.cpp: Added functionality converting S, Y, and Z
matrices and matrix vectors into each other.
* equation.cpp: Fixed bug when exporting matrix vectors into
the resulting dataset.
2004-08-15 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: The SP solver can now use a sorted nodelist.
This save at least N^2 circuit list traversion.
* nodelist.cpp: Made a big effort to implement a sorted
nodelist which can be used by the SP solver in order to
increase speed while looking for possible connections.
* dcsolver.cpp: Moved nodelist creation from the DC solver
class into the nodelist class itself.
* check_netlist.cpp: New function printing the content of the
current netlist in short form.
2004-08-14 Stefan Jahn <stefan@lkcc.org>
* eqnsys.cpp: Fixed Schmidt and v. Mises convergence
criteria.
Implemented 'successive over relaxation' for solving linear
equation systems.
2004-08-12 Stefan Jahn <stefan@lkcc.org>
* object.cpp (propertyList): Avoid string buffer overflow.
* eqnsys.cpp: New equation systems solvers using Jacobi and
Gauss-Seidel algorithm. Implemented algorithm to ensure
non-zero diagonal elements for these new methods to work
properly.
* dcsolver.cpp: Avoid buffer overflow for long node names.
Changed all callers.
* circuit.cpp: Avoid buffer overflow for long voltage/current
nodes (occur when subcircuits are involved).
2004-08-09 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Using input port impedance of noise
analysis for calculating Rn.
* check_netlist.cpp: Fixed yet another bug caused by nested
subcircuit definitions.
Checking for substrate definitions of all known microstrip
components properly.
Search for non-linearities within subcircuit definitions in
order to verify that DC simulation is required.
2004-08-06 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Renamed Gopt into Sopt. Changed all
referees.
2004-08-01 Stefan Jahn <stefan@lkcc.org>
* check_netlist.cpp: Fixed a bug when nested subcircuits
occurred within the netlist.
* strlist.cpp (toString): The function takes an (optional)
argument which specifies the concatenating string.
* eqnsys.cpp: Finally got the iterative Jacobi's method
for solving linear equation systems working.
* matrix.cpp: New functionality. Converting S to G and G to
S twoport parameters possible.
* check_touchstone.cpp (touchstone_check): Fixed a mini bug
causing multiport definitions to fail loading.
2004-07-31 Stefan Jahn <stefan@lkcc.org>
* check_netlist.cpp: Checking for non-equal variables in same
order sweeps (with the same simulation instance to sweep).
* eqnsys.cpp: Fixed Gauss-Jordan algorithm.
* dcsolver.cpp: Fixed a bug. Now really using DC analysis
properties for convergence tolerances.
* eqnsys.cpp: Started to implement the Jacobi's method for
solving linear equation systems. Not yet working...
2004-07-30 Stefan Jahn <stefan@lkcc.org>
* net.cpp: When inserting and removing a circuit from the
netlist, then set the enabled property of the circuit.
* circuit.cpp: Each circuit object knows whether it is
'enabled' meaning that it is within the currently processed
netlist.
* net.cpp: Defining the 'Pac' as S-parameter port only if
it was not defined within a subcircuit.
* circuit.cpp: Added new property to the circuit object. The
subcircuit reference is used to remember to which subcircuit (if
any) the component belongs.
* check_netlist.cpp: Added a check for duplicate port number
entries for the S-parameter analysis.
2004-07-28 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Avoiding second singularity when two full
reflective ports get interconnected. Done for both
S-parameter and noise analysis.
2004-07-27 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Avoiding same singularity for noise matrices
as already fixed for S-parameters.
Fixed calculation of noise parameters.
2004-07-26 Stefan Jahn <stefan@lkcc.org>
* matrix.cpp: Added noise correlation matrix transformations
for Y-, Z- and S-parameter representations.
* check_netlist.cpp (definition_available): Added noise
model parameters to junction FET properties.
2004-07-25 Stefan Jahn <stefan@lkcc.org>
* circuit.cpp: New functions getMatrixS(), setMatrixS(),
getMatrixN() and setMatrixS() for convenience when playing
with S-parameters and noise correlation matrices.
* check_netlist.cpp (definition_available): Added optional
'Temp' property to S-parameter file component.
* vector.cpp: New assignment constructor for convenience.
* vector.h (class vector): Added additional '+' and '*'
operators for convenience and changed all 'friend' return
values to be 'vector&' instead of 'vector*'. Changed all
callers.
* vector.cpp: Two new constructors create an unnamed or named
instance with a given initial size.
* spsolver.cpp: Running calcNoise() for each circuit if
requested by the noise analysis.
* circuit.h (class circuit): Added extra virtual function
calcNoise() for noise analysis.
* check_touchstone.cpp: Fixed re-normalizing functionality
of of Y-, Z-, H- and G-parameters and those for the noise
parameters as well.
2004-07-22 Stefan Jahn <stefan@lkcc.org>
* check_touchstone.cpp: Support for noise parameters in
touchstone files.
2004-07-21 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Running 'initSP()' on every circuit before
simulating. Using 'matvec::createMatrixString()' for creating
the vector names.
* scan_netlist.l: Allowing "{File}" token in order to pass
file references to component properties.
* matvec.cpp: Two new functions: createMatrixString() and
isMatrixVector(). Moved from 'equation.cpp'.
* input.cpp: Changing the number of ports when creating a
S-parameter file component.
* equation.cpp: Using 'matvec::createMatrixString()'
for creating the vector names and 'matvec::isMatrixVector()'
to detect matrix vectors.
* dataset.cpp: New functions returning the number of dataset
vectors (variables and dependencies).
* circuit.cpp: Size (number of ports) can now be changed by
calling 'setSize()'.
* check_touchstone.cpp: Using 'matvec::createMatrixString()'
for creating the vector names.
* check_netlist.cpp (definition_available): Added 'SPfile' as
new available component.
Checking range for both required *and* optional properties.
2004-07-18 Stefan Jahn <stefan@lkcc.org>
* matrix.cpp: Implemented stos() functionality converting
reference impedances of scattering parameters.
* check_touchstone.cpp: Implemented re-normalizing the impedance
within touchstone files.
2004-07-16 Stefan Jahn <stefan@lkcc.org>
* scan_netlist.l: Added additional tokens for subcircuit
definitions.
* parse_netlist.y: Scribbled down the grammar for subcircuit
definitions. Also saving the line number for component lines.
* check_netlist.cpp: Added the functionality used to provide
subcircuits in netlists. This includes checking the subcircuits
itself, expanding them into the global netlist and checking
their context validity.
Also giving the offending line number for checker errors when
possible.
2004-07-12 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Avoiding singularity when two full reflective
ports of two different circuits are connected.
Saving linear 'F' and 'Fmin' instead of logarithmic.
2004-07-11 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Running the init() function before
insertConnections() to give components a chance to add new
circuits to the netlist.
* net.cpp: removeCircuit() has now an additional argument
'dropping' indicating whether the the circuit to be removed
should go into the drop list or not. New function
containsCircuit() which checks whether a given circuit is in
the netlist or not. New function checkCircuitChain() checking
the the double chain of the netlist (programmers helper
function).
2004-07-08 Stefan Jahn <stefan@lkcc.org>
* property.cpp (toString): New function returning text
representation of a property. The properties are now typified
and can be modified using set().
* object.cpp: Added some functionality in order to modify an
objects properties. New function returning a string
representation of the property list.
2004-07-06 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Removed some of the noise debug messages and
optimized 'sqr (abs (x))' to be 'norm (x)'.
* equation.cpp: Exporting simple matrices as well.
2004-07-05 Stefan Jahn <stefan@lkcc.org>
* scan_netlist.l: Changed the scanner appropriately for the
new parser functionality.
* parse_netlist.y: New application 'array' implemented which
can do indexing array-like structures.
* exception.h, exceptionstack.h: Put exception and
exceptionstack classes into the qucs:: namespace to avoid name
clashes with standard C++ classes. Changed all callers.
* evaluate.cpp: Implemented 'array' functionality for
indexing vectors, matrices and matrix vectors.
* equation.cpp: Implemented usage of matrices. Also added
support for matrix, vector and matrix vector indices.
Fixed a bug when accessing results in argument lists (the
expression lists). Exporting matrix vectors correctly now.
2004-07-04 Stefan Jahn <stefan@lkcc.org>
* matvec.cpp: When get()'ting a vector from a matrix vector
it gets named as well based on the matrix vectors name and the
appropriate indices.
* equation.cpp: Matrix vectors can now also be exported into
the dataset.
* dataset.cpp: Added some functionality which allows the
programmer to pass chains of data vectors to the dataset.
* spsolver.cpp: Remove unnecessary local variables.
* evaluate.cpp: Implemented example matrix vector operation
for testing.
* equation.cpp: Added some functionality which is able to
detect matrix vectors in datasets. These matrix vectors will
be available in the equations set. Still something to do...
* matvec.h (class matvec): Added some basic operations on
matrix vectors.
2004-07-03 Michael Margraf <michael.margraf@alumni.tu-berlin.de>
* fixed all bugs in s-parameter noise analysis.
2004-07-03 Stefan Jahn <stefan@lkcc.org>
* scan_netlist.l: Fixed bug when writing simply 'j' or 'i' with
no trailing number.
* equation.cpp (equation_constants): New function which adds
some equation constants (e.g. pi) to the list of equations.
* matvec.h (class matvec): New class implementing a vector
of matrices. Still a lot to do...
* nodelist.cpp: Additional function which returns a text
representation of the circuit names connected to the given
node number.
* matrix.cpp: Fixed a bug in H to S matrix transformation.
* eqnsys.cpp (solve_lu): Throwing exception if equation system
cannot be solved with LU decomposition.
* dcsolver.cpp: Using new exception stack code to throw and
catch possible error conditions.
* exception.h (class exception): New class implementing
an exception which can be put onto the exception stack.
* exceptionstack.h (class exceptionstack): New class
implementing a simple exception stack.
2004-07-01 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp (createSP): S-parameter solver outputs its
results in 'S[a,b]' notation, was 'Sab'.
* check_netlist.cpp: Netlist checker now also checks whether
properties are integers or real numbers.
2004-06-30 Stefan Jahn <stefan@lkcc.org>
* sweep.cpp: Fixed bug in logarithmic sweep creation.
* check_netlist.cpp: Allowing the new properties of the '.SP'
analysis to be part of the netlist.
Checking whether required string properties are identifiers
in fact.
Fixed bug: First evaluating unit scale, then checking for range.
* spsolver.cpp: Now also uses the 'Type', 'Start', 'Stop' and
'Points' properties to generate frequency sweeps using the new
sweep class.
* complex.cpp: Added printing functionality for debugging.
* matrix.cpp (twoport): Implemented all kinds of matrix
conversions.
* complex.cpp: Using 'pivotising' for '/' operator on complex
numbers to avoid numerical overflow and underrun on a low level.
2004-06-27 Stefan Jahn <stefan@lkcc.org>
* parasweep.cpp: Using the new sweep classes for the parameter
sweep values.
* vector.cpp: Fixed a bug in the unary '-' operator which caused
the given vector to be modified. Now it returns a new vector.
* equation.cpp: Allowing the special 'Export' equation
indicating whether the variables defined within the same equation
instance are output into the dataset or not.
* parse_netlist.y: Saving the equation instance name for the
new 'Export' equation.
* scan_netlist.l: Allowing 'x.x' and 'x[a,b]' syntax for
identifiers when scanning equations.
* dcsolver.cpp: Implemented usage of DC simulation options:
MaxIter (maximum iteration), saveOPs (save operating points),
reltol (relative tolerance for convergence), abstol (absolute
tolerance for current) and vntol (absolute tolerance for
voltage).
(createI): Save only current through real voltage sources and
explicit current probes if 'saveOPs' is not given.
Changed naming scheme of dataset output variables. It is now:
for node voltages: 'node.V', for currents: 'component.I', for
operating points: 'component.xx'.
* check_netlist.cpp (definition_available): Added 'DispModel'
(i.e dispersion model) to microstrip components.
2004-06-26 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Started to implemented noise analysis.
Using normalized correlation matrices.
* check_netlist.cpp (definition_available): Added Noise, NoiseIP
and NoiseOP to S-parameter simulation properties.
2004-06-25 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Additionally computing noise wave correlation
matrices. To be verified and tested...
* input.cpp: Assigning default values to component properties
which are optional and not given in the netlist.
* circuit.cpp: Circuit contains a new property indicating
whether it is non-linear or not.
Added noise wave correlation matrix to circuit.
* check_netlist.cpp (definition_available): Component
definitions now also include allowed ranges and default values.
Property values are checked for their value range.
2004-06-22 Stefan Jahn <stefan@lkcc.org>
* sweep.cpp: Implemented list, constant, linear and logarithmic
sweep definitions.
* sweep.h (class sweep): New class being the base class for
linear, logarithmic, constant, etc. sweeps.
* ucs.cpp (main): Implemented help message when passing -h or
--help options to the main program.
* spsolver.cpp (dropConnections): Removing inserted circuits
in the correct order (indicated by those time stamps). This
fixes a bug in s-parameter analysis causing wrong kind of nodes
in the netlist.
* net.cpp (insertedCircuit): Saving 'time stamp' of inserted
circuit for s-parameter analysis.
* circuit.h (class circuit): New private variable saving the
'time stamp' of an inserted circuit.
* check_netlist.cpp: New generic function checking special
identifiers in component properties, e.g. Type="nfet" in the
JFET component.
Allowing 'Type' property in JFET component.
2004-06-20 Stefan Jahn <stefan@lkcc.org>
* circuit.cpp (copyMatrixS): New function copying S-parameter
matrix elements to the circuit.
2004-06-16 Michael Margraf <michael.margraf@alumni.tu-berlin.de>
* check_netlist.cpp: Added parameter "Symbol" to "Resistor".
2004-06-09 Stefan Jahn <stefan@lkcc.org>
* check_netlist.cpp: Renamed some diode parameters.
2004-06-04 Stefan Jahn <stefan@lkcc.org>
* nodelist.cpp: Also saves the internal flag of each node
added to the nodelist.
* node.cpp: Node have now an internal flag.
* dcsolver.cpp: When solving DC networks initDC() is now
called before setting up the node list and the voltage source
list.
(assignVoltageSources): New function re-assigning the voltage
source numbers.
When saving node voltages and branch current into the dataset
it is checked whether these are internal or not.
* circuit.h (class circuit): The initDC() function takes
now an argument containing the actual DC analysis object.
(class circuit): A built in DC voltage can be marked as
internal as well.
* circuit.cpp: It is now possible to mark circuit nodes to
be for internal use only (series resistances of non-linear
devices).
(createInternal): Returns name for internal nodes/circuits.
* check_netlist.cpp: Added optional Rs parameter to diode
model.
2004-06-01 Stefan Jahn <stefan@lkcc.org>
* scan_dataset.l, scan_netlist.l, scan_touchstone.l: Included
<io.h> for MinGW32 platform (native Win32).
2004-05-26 Stefan Jahn <stefan@lkcc.org>
* circuit.cpp: Fixed assertion bug when s-parameter analysis
uses arbitrary circuits with more than maximum number of ports
allowed during dc analysis.
2004-05-23 Stefan Jahn <stefan@lkcc.org>
* circuit.cpp: Swapped B matrix indices and changed all DC
model callers (attenuator, biastee, cccs, ccvs, circulator,
dcfeed, inductor, isolator, strafo, trafo, vac, vccs, vcvs,
vdc, gyrator) and of course the dcsolver.
2004-05-22 Stefan Jahn <stefan@lkcc.org>
* equation.cpp: Fixed a bug which occurred when a function
like max() or avg() is used to create a value from a dataset.
This kind of function produces now an independent dataset.
* circuit.h (MAX_CIR_VSRCS): Raised the maximum number of
builtin voltage sources (for circulator).
* circuit.cpp: Checking for maximum number of circuit nodes
(ports) and maximum number of builtin voltage sources.
2004-05-20 Stefan Jahn <stefan@lkcc.org>
* matrix.cpp: Optimized copy constructors.
new functions: detGauss() and inverseGaussJordan(). These
functions compute determinant and inverse of a matrix using
Gauss based algorithms.
* eqnsys.cpp: Fixed and improved Gauss and Gauss-Jordan
algorithm for solving equations systems.
2004-05-17 Stefan Jahn <stefan@lkcc.org>
* check_netlist.cpp: Check for duplicate parameter names in
parameter sweeps, but allow them in same order sweeps.
* strlist.cpp: New function index() returning the position of
the first occurrence of the given string.
* check_netlist.cpp: Checking for duplicate definitions in
equations and parameter sweep variables.
* dataset.cpp: Fixed dataset output for single DC analyses.
* parasweep.cpp: Fixed assignment of variable dataset
dependencies.
2004-05-09 Stefan Jahn <stefan@lkcc.org>
* equation.cpp: Fixed a bug occurring when solution of equations
appear to be plain reference vectors.
Made equations depending on independent data vectors of the dataset
dependent vectors.
2004-05-05 Stefan Jahn <stefan@lkcc.org>
* check_netlist.cpp: Checking presence and necessity of DC
analysis.
2004-05-02 Stefan Jahn <stefan@lkcc.org>
* net.cpp: Implemented implicit dependencies of analyses.
* analysis.cpp (delAnalysis): Implemented counterpart of
addAnalysis().
* check_netlist.cpp: Appended some more required model
parameters to the diode model.
* spsolver.cpp: Implemented a function which restores the
original netlist. Modifications were necessary because of the
actual analysis algorithm.
2004-05-01 Stefan Jahn <stefan@lkcc.org>
* vector.cpp: Fixed copy constructor.
2004-04-28 Michael Margraf <michael.margraf@alumni.tu-berlin.de>
* class complex: sin(), cos(), tan(), cot(), arcsin(), arccos(),
arctan(), arccot(), sinh(), cosh(), tanh(), coth(), arsinh(),
arcosh(), artanh(), arcoth(), log2()
* class vector: sin(), cos(), tan(), cot(), arcsin(), arccos(),
arctan(), arccot(), sinh(), cosh(), tanh(), coth(), arsinh(),
arcosh(), artanh(), arcoth(), max(), min(), sum(), prod(), avg(),
log2()
* class evaluate: sin(), cos(), tan(), cot(), arcsin(), arccos(),
arctan(), arccot(), sinh(), cosh(), tanh(), coth(), arsinh(),
arcosh(), artanh(), arcoth(), max(), min(), sum(), prod(), avg(),
log2()
* fixed many bugs in class evaluate/complex
2004-04-28 Stefan Jahn <stefan@lkcc.org>
* matrix.cpp: Implemented all remaining matrix conversions not
limited to two-port parameters (ytos, ztos, ytoz, ztoy).
2004-04-26 Stefan Jahn <stefan@lkcc.org>
* complex.cpp: Added remaining modulo '%' operators.
* dcsolver.cpp: Fixed memory leak when re-using a DC analysis.
* net.cpp: Fixed same order parameter sweep definitions.
2004-04-25 Stefan Jahn <stefan@lkcc.org>
* input.cpp: Putting substrate definitions into an environment
and assigning these to the appropriate components.
(createSubstrate): New function creating substrate instances.
* check_netlist.cpp: Added substrate and microstrip line
to the list of available netlist definitions. Allowing
variables in microstrip elements.
* variable.h (class variable): Changed variable content
within environments.
* property.cpp (getDouble): Returning changed variable content.
* parasweep.cpp: Using parameter sweep variable as now
defined in the environment.
* input.cpp: Putting correct parameter sweep variable into
environment.
* check_netlist.cpp: Validating parameter sweeps. Detecting
cyclic definitions.
2004-04-19 Stefan Jahn <stefan@lkcc.org>
* vector.cpp: Replaced 'module()' functions by '%' operator.
* scan_netlist.l: Passing '%' character to parser.
* parse_netlist.y: Added '%' operator.
* evaluate.cpp: Fixed unary minus and sqrt functions.
* equation.cpp: Checking return type of evaluators. Displaying
the '%' operator like '+' and alike operators. Giving notice
for undefined variables if necessary.
* complex.cpp: Defined '%' operator instead of 'modulo()'
function.
2004-04-18 Michael Margraf <michael.margraf@alumni.tu-berlin.de>
* class complex: dB(), sqrt(), exp(), ln(), log10(),
floor(), modulo(), 3x pow()
* class vector: set(), dB(), sqrt(), exp(), ln(), log10(),
3x modulo(), 3x pow(), operator - (), operator = ()
* class evaluate: plus, minus, times, over, modulo, power,
real, imag, abs, conj, norm, phase, arg, dB, sqrt, exp, ln,
log10
2004-04-13 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Adding (independent) frequency vector only once
to output dataset.
* parasweep.cpp: Fixed variable dependency assignments.
* net.cpp: Reordering analysis runtime correctly.
* dcsolver.cpp: Removed unnecessary frequency vector in output
dataset.
* dataset.cpp: New helper functions.
* check_netlist.cpp: New required parameter for variable sweep
definitions "Sim".
* analysis.cpp (addAnalysis): New function. Adds a sub analysis
to the analysis object.
2004-04-04 Stefan Jahn <stefan@lkcc.org>
* logging.c: Check whether logging is possible.
* dcsolver.cpp: Using complete representation of the D-MNA matrix
including off-diagonal elements. Changed all callers.
2004-03-28 Stefan Jahn <stefan@lkcc.org>
* vector.cpp: Fixed a bug in the copy constructor.
* ucs.cpp (main): Calling the global equation solver.
* property.cpp: Fixed an uninitialized value bug.
* logging.c: Fixed a buffer overrun bug.
* evaluate.cpp: Added some examples for the application
implementations.
* equation.cpp: Added the final evaluate() function to each
type of equation node.
(equation_solver): This new function is called in order to
run the global equation solver.
* equation.cpp: Added toString() function to each type of
equation node.
2004-03-21 Stefan Jahn <stefan@lkcc.org>
* evaluate.h (class evaluate): New class implementing the
actual evaluation function (applications) for the equations
in Qucs.
* equation.cpp (reorderEquations): The function reorders
equations and determines whether they can be evaluated or not
in this new order.
(applyTypes): Type checking function implemented.
2004-03-20 Stefan Jahn <stefan@lkcc.org>
* strlist.cpp (toString, join): Two new functions. One for
returning a string representation of a string list and the
other for joining two string lists.
* equation.cpp (detectCycles, findDuplicate): New functions
determining whether there are or duplicate cyclic equations.
2004-03-14 Stefan Jahn <stefan@lkcc.org>
* equation.cpp: Started to implement the equation checker.
2004-03-08 Stefan Jahn <stefan@lkcc.org>
* scan_netlist.l: Introduced new EQN state for parsing
equations in netlists. The parser+scanner is now working
correctly.
2004-03-07 Stefan Jahn <stefan@lkcc.org>
* parse_netlist.y: Added parser and scanner rules for
equations inside netlists.
2004-02-18 Stefan Jahn <stefan@lkcc.org>
* eqnsys.cpp (solve_lu): New equation system solver implemented
using so called LU decomposition.
2004-02-17 Stefan Jahn <stefan@lkcc.org>
* eqnsys.cpp (solve_gauss_jordan): New solution method for
linear equation systems implemented.
* Makefile.am (libqucsator_a_SOURCES): The libqucsator library
can be used by the Qucs GUI in order to handle datasets. The
header 'libqucsator.h' must be included.
2004-02-16 Stefan Jahn <stefan@lkcc.org>
* operatingpoint.cpp: New class representing an operating
point of a non-linear component.
* circuit.cpp: Added the functionality in order to handle
the operating point of non-linear components.
* object.cpp (hasProperty): New function checking whether an
object has a certain property or not.
* dcsolver.cpp: Generalized the G matrix creation to apply
also to components with more than two ports.
* circuit.cpp (setY, getY): Made these functions depending on
the specified port numbers.
2004-02-15 Stefan Jahn <stefan@lkcc.org>
* matrix.cpp (exchange): New function for swapping two rows
of a matrix object. Used during Gaussian elimination.
* eqnsys.cpp: New class implementing a linear equation system
solver with different kind of algorithms.
2004-02-13 Stefan Jahn <stefan@lkcc.org>
* vector.cpp: Vectors do have an arbitrary origin. Used
to identify analysis results.
* variable.cpp: Added loads of operations regarding double
values.
* ucs.cpp (main): Creating root environment and passing
it down to analyses.
* property.cpp, object.cpp: Properties can now also be variables.
* net.cpp: Ordering analysis for additional parameter sweeps
implemented.
* input.cpp: Handling variables correctly. Creating variables
in a certain environment and using them later works somehow.
* dcsolver.cpp: Temporarily removed the frequency vector
from the DC dataset result (must be fixed).
* dataset.cpp: It's now possible to assign dependencies to
variable vectors in a dataset originated by some analysis (or
something else).
* check_netlist.c: The '.SW' definition is now accepted by
the netlist parser. Variables can now be resolved by parameter
sweep definitions.
* analysis.cpp: Added type identifier, environment and
sub analysis.
* Makefile.am (qucsator_SOURCES): Added the new source files.
* parasweep.cpp, parasweep.h: Parameter sweep implementation.
* environment.cpp, environment.h: New class implementing
a variable name space.
2004-02-09 Stefan Jahn <stefan@lkcc.org>
* dcsolver.cpp: Additionally saving the reference node voltage
value into the components's nodes.
* check_netlist.c, input.cpp: Incorporated the new DC current
probe.
* check_netlist.c: Allowing the new parameter 'n' (ideality
coefficient of the saturation current).
* variable.cpp, variable.h: New files. The variable class
is going to be the big calculator merging all kinds of math
types. Also it will be the base object for calculation
environments and global variables.
2004-02-03 Stefan Jahn <stefan@lkcc.org>
* dcsolver.cpp: Non-linear DC circuit analysis is somewhat
working now.
2004-02-01 Stefan Jahn <stefan@lkcc.org>
* dcsolver.cpp: First attempt to implement nonlinear
DC analysis. Not yet working.
* matrix.cpp: Fixed determinant result for empty matrices.
2004-01-30 Stefan Jahn <stefan@lkcc.org>
* dcsolver.cpp: It's now possible to simulate circuits with
more than a single built in voltage source.
* circuit.cpp: Applied changes for circuits with more than a
single built in voltage source.
2004-01-28 Stefan Jahn <stefan@lkcc.org>
* dcsolver.cpp: Generalized the creation of the B, C, D, E and
I matrices for dependent sources like VCCS, CCCS, etc.
* circuit.h (class circuit): Renamed 'G' functionality into
'Y' preparing it for use in AC analysis. Also added some more
functionality regarding the MNA.
2004-01-24 Stefan Jahn <stefan@lkcc.org>
* circuit.h (class circuit): Added microstrip substrate
property to basic circuit class.
2004-01-17 Stefan Jahn <stefan@lkcc.org>
* parse_dataset.y: Fixed reduce/reduce conflict.
* scan_dataset.l: Added explicit rule for complex number.
2003-12-26 Stefan Jahn <stefan@lkcc.org>
* spsolver.cpp: Now running calcS() instead of calc().
* net.cpp: Now counts the DC voltage sources in a circuit
list.
* matrix.cpp: Fixed bug in matrix multiplication.
* circuit.cpp: Each circuit has now 'type' field containing
a circuit identifier. Renamed calc() to calcS() and added a
virtual calcG() method. Changed all components.
* check_netlist.c: Applied changes for DC analysis.
* dcsolver.cpp, dcsolver.h, nodelist.cpp, nodelist.h: New
files implementing the DC analysis for passive elements for
now.
2003-12-21 Stefan Jahn <stefan@lkcc.org>
* analysis.cpp, analysis.h, spsolver.cpp, spsolver.h: New files.
Reorganized the source code in order to prepare it for other
analysis types.
2003-12-20 Stefan Jahn <stefan@lkcc.org>
* input.cpp (createCircuit): Added 'Vdc', 'Idc' and 'Vac'
components to the list of available components.
2003-12-07 Stefan Jahn <stefan@lkcc.org>
* check_netlist.c: Made modifications regarding the
symmetrical transformer.
* input.cpp (createCircuit): Added 'sTr' component to the
list of available circuit components.
2003-12-05 Stefan Jahn <stefan@lkcc.org>
* matrix.cpp (stoy, stoz): New matrix conversion routines.
2003-12-01 Stefan Jahn <stefan@lkcc.org>
* net.cpp: Added support for differential s parameter
ports.
2003-11-30 Stefan Jahn <stefan@lkcc.org>
* check_netlist.c: Checking the number of .SP actions and
the number of Pac definitions.
2003-11-28 Stefan Jahn <stefan@lkcc.org>
* matrix.cpp, matrix.h: Added new matrix computation class.
Implemented all function necessary for port impedance
transformations (add, sub, mul, inverse, etc.).
2003-11-22 Stefan Jahn <stefan@lkcc.org>
* parse_touchstone.y: New parser grammar for the touchstone file
format implemented.
* scan_touchstone.l: New scanner (lexer) for the touchstone file
format added. Adjusted Makefile rule.
* vector.cpp: The 'add()' method can now also join the vector
object data with another vector.
* dataset.cpp (load_touchstone): Added import functionality for
the touchstone file format.
* strlist.cpp: Two new function 'contains()' and 'get()'
implemented.
* scan_dataset.l: Allow dataset values to be normal integers.
2003-11-20 Stefan Jahn <stefan@lkcc.org>
* checker.c: Fixed bug in available component list.
2003-11-15 Stefan Jahn <stefan@lkcc.org>
* scan_dataset.l, parse_dataset.y, check_dataset.cpp: Scanner,
parser and checker functionality needed for the dataset::load()
functionality. Makefile rules added.
* dataset.cpp (load): New function. Can be uses to read a
dataset from a file.
* vector.cpp: New function reverse(), added dependency list
and original request size.
* strlist.cpp, strlist.h: New class representing a list
of strings. Added those files to 'Makefile.am'.
2003-11-08 Stefan Jahn <stefan@lkcc.org>
* logging.c: Documented this file's functions.