2011-03-10 Stefan Jahn * evaluate.cpp: Fixed out-of-bounds segfault in [] operator. 2011-03-07 Stefan Jahn * applications.h: Stated more possible combinations for ?: operation. * evaluate.cpp: Implemented 'equal' (== and !=) operations for more argument variations. 2009-11-12 Stefan Jahn * interpolator.cpp (cinterpolate): Implemented complex data interpolations. 2009-11-03 Stefan Jahn * 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 * 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 * 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 * matvec.cpp: Added two more static helper functions to determine matrix entries in vector list of datasets. 2009-09-13 Stefan Jahn * 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 * matrix.cpp: Implemented matrix power operation with integral positive and negative powers. Made it available in the equation solver. 2009-04-16 Stefan Jahn * scan_netlist.l: Accept global node notation. * check_netlist.cpp: Made node translations aware of global nodes like "subst!". 2009-03-29 Stefan Jahn * 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 * evaluate.cpp: Fixed dB() calculation for real arguments to reflect power conversion (10*log10) as in all other computations. 2009-03-14 Stefan Jahn * trsolver.cpp: Allowing time start/stop to be steered by sweep variables correctly. 2009-03-07 Stefan Jahn * 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 * acsolver.cpp: Voltage probe now returns noise voltage data properly. 2008-10-26 Stefan Jahn * 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 * compat.h: New file containing system specific #include's and #define's. Changed all callers. 2008-10-07 Stefan Jahn * 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 * 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 * 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 * input.cpp: New function registerCircuits(). Global preparations for modularization of circuit components... 2008-09-30 Stefan Jahn * input.cpp: Fixed instantiation of HICUM L0/V1.2 model. 2008-09-13 Stefan Jahn * equation.cpp: Fixed segfault bug and memory leakage. 2008-09-12 Stefan Jahn * 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 * evaluate.cpp: Fixed range operator in indices in independent vectors. 2008-07-03 Stefan Jahn * check_netlist.cpp: Allowing property references inside the same instance of a component. 2008-05-27 Stefan Jahn * 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 * check_touchstone.cpp: Fixed compile issue for some gcc/glibc combination (SuSE linux). 2008-04-11 Stefan Jahn * check_netlist.cpp: Fixing compile issues for MSVC. 2008-03-27 Stefan Jahn * 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 * scan_netlist.l: Additionally allowing dBu in equations as well as mil, in, ft and yd in component properties. 2008-02-15 Stefan Jahn * Fixed some compile warnings for g++ 4.3 version. 2008-01-18 Stefan Jahn * 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 * scan_touchstone.l: Fixed bug in touchstone scanner. Making the 'R' in the option line case insensitive. 2007-12-30 Stefan Jahn * 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 * 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 * hash.h (class hashentry): Fixed compile error for "gcc version 4.1.1 on fedora 7 linux". 2007-11-02 Stefan Jahn * vector.cpp: Added optional third argument to unwrap() specifying the phase/angle step. 2007-11-01 Stefan Jahn * 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 * parse_netlist.y: First preparation to allow vector properties to be a reference to equation variables. 2007-10-21 Stefan Jahn * evaluate.cpp: Fixed 'out of bounds' return value in order to avoid segmentation fault. 2007-10-19 Stefan Jahn * 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 ususal (e.g. subcircuit parameters). 2007-10-02 Stefan Jahn * evaluate.cpp: Added the ?: operator for matrices as well as vectors. Implemented dB() function for matrices and matrix vectors. 2007-09-27 Stefan Jahn * evaluate.cpp: Fixed if-then-else evaluation for mixed real/complex arguments as well as for pure complex arguments. 2007-09-25 Stefan Jahn * 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 * 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 * evaluate.cpp: Added random number functions. 2007-09-04 Stefan Jahn * differentiate.cpp: Fixed some memory leaks. * equation.cpp: Added new property to an equation node 'skip' indicating that the node (e.g. equation assigment) 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 * scan_netlist.l: Allowing engineering notation of numbers in equations. 2007-08-23 Stefan Jahn * 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 * 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 * parse_netlist.y: Re-allow range specifications as function arguments. It disappreared while implementing the ?: operator. 2007-06-15 Stefan Jahn * 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 * 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 * 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 * hash.cpp: Added count() function to hash. Also added default hashiterator constructor. 2007-05-15 Stefan Jahn * input.cpp: Allow variables in substrate properties. 2007-05-05 Stefan Jahn * 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 * 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 * evaluate.cpp: Using absolute value of complex result in ifthenelse contruct. 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 * 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 * scan_netlist.l: Avoid conflict between assignment '=' and the new '==' operator. 2007-04-26 Stefan Jahn * 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 * 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 * differentiate.cpp: Added diferentiation formulas for arsech() and arcosech(), also added simplifier for immediate square expressions. 2007-04-23 Stefan Jahn * 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 * 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 * 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 * 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 * scan_zvr.l, check_zvr.cpp: Supporting some more data formats of the ZVR analyser. 2007-04-07 Stefan Jahn * 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 * 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 * eqnsys.cpp: Some more comments on the SVD diagonalization process added. 2007-03-21 Stefan Jahn * 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 * trsolver.cpp: Modifying U*Prev values of non-linear devices when a time step has been rejected. 2007-03-03 Stefan Jahn * 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 * 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 * 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 * 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 assigment 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 * 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 * 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 * 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 * nasolver.cpp: Fixing probe functionality. 2007-01-30 Stefan Jahn * ucs.cpp (main): Updated copyright notice. 2006-10-16 Stefan Jahn * 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 funtionality for environments. * check_netlist.cpp: Resolving variables in equations. Creating a real environment tree. Checking equtions in all subcircuits as well. 2006-10-09 Stefan Jahn * trsolver.cpp: Fixed a bug in the transient solver occuring when a components MNA matrix changes during DC and TR (e.g. transmission line). 2006-09-24 Stefan Jahn * qucsdefs.h (qucs_definition_available): Added 'MaxStep' as valid property in transient analysis. 2006-09-19 Stefan Jahn * 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 * 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 * parse_netlist.y, check_netlist.cpp: Preparations to have equations inside subcircuits. 2006-09-11 Stefan Jahn * 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 * 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 * 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 * 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 * 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 * parasweep.cpp: Fixed a bug occuring 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 * 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 * parse_dataset.y (YYMAXDEPTH): Increased stack size for *very* big dataset files. 2006-07-16 Stefan Jahn * 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 * 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 * 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 * 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 * 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 * 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 * complex.cpp: Finally fixed the complex arccos() function. 2006-05-14 Stefan Jahn * hbsolver.cpp: Added TODO list for the HB solver. 2006-05-11 Stefan Jahn * qucsdefs.h (qucs_definition_available): Allow diode's 'M' parameter in the range 0..2. 2006-05-01 Stefan Jahn * 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 * 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 * 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 * 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 * 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 * 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 adressed but not yet working... 2006-04-06 Stefan Jahn * 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 * fourier.cpp: Implemented multi-dimensional Fast Fourier Transformation (also IFFT). 2006-04-03 Stefan Jahn * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * evaluate.cpp: Loads of new functions in the equation solver. 2006-03-05 Stefan Jahn * 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 * trsolver.cpp: Fixed some memory leaks in the transient analysis solver. 2006-02-22 Stefan Jahn * 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 * 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 * 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 * Many changes for g++-4.1 errors (-ffriend-injections). 2006-02-06 Stefan Jahn * parse_netlist.y: Allowing real expressions in range specifications. * scan_netlist.l: Had to revert acceptance of signed real values. Grammer wouldn't even work for "1+1"... Now implemented ranges in the right way. 2006-02-05 Stefan Jahn * 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 * 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 * 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 * qucsdefs.h (qucs_definition_available): Added temperature and area parameters for jfet, bjt and mosfet devices. 2005-12-11 Stefan Jahn * 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 * 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 * 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 * precision.c (precinit): New file containing initialization of math constants. 2005-10-29 Stefan Jahn * 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 * 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 * 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 * 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 * 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 * nasolver.cpp: Fixed noise correlation matrix entry collector (buggy due to new correlation sources). 2005-10-02 Stefan Jahn * check_netlist.cpp: Property range specification now also including interval boundary conditions. 2005-09-25 Stefan Jahn * transient.cpp, trsolver.cpp: Fixed forward/backward Euler method remarks. 2005-07-18 Stefan Jahn * qucsdefs.h (qucs_definition_available): Allowing negative length of ideal transmission line. 2005-07-03 Stefan Jahn * check_netlist.cpp: Fixed a bug occurring when S-parameter file container is used in subcircuits. 2005-06-26 Stefan Jahn * tvector.cpp: Added setData() function in order to assign external data (sub)vector to a tvector. 2005-06-19 Stefan Jahn * 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 * vector.cpp: New unwrap() function implemented. * evaluate.cpp: Added unwrap(), rad2deg() and deg2rad() functions. 2005-05-21 Stefan Jahn * 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 * 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 * scan_netlist.l: Removed 'unistd' option from all scanners files (scan_*.l). 2005-05-02 Stefan Jahn * 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 * 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 * 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 * complex.cpp: Using xhypot() in abs() calculation for better numerical stability. 2005-04-17 Stefan Jahn * 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 * 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 * eqnsys.cpp (substitute_qr_householder_ls): Implemented least square solution of under-determined equation systems using QR decomposition. 2005-04-09 Stefan Jahn * 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 * 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 * 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 * 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 * Makefile.am: Avoid re-generation of flex/bison files when not in maintainer mode. 2005-03-13 Stefan Jahn * 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 * 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 * evaluate.cpp (THROW_MATH_EXCEPTION): Made this macro compatible with non-ISOC99 compilers. 2005-02-21 Stefan Jahn * acsolver.cpp (solve_noise): Hopefully fixed AC noise analysis. Nase voll, Faxen dicke, jetze. 2005-02-19 Stefan Jahn * 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 * dcsolver.cpp: If a preferred convergence algorithm is requested skip this one in the fallback list. 2005-02-13 Stefan Jahn * evaluate.cpp (applications): Added stability factor equations. Available as Rollet(), Mu() and Mu2(). 2005-02-12 Stefan Jahn * 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 * 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 * Made loads of tiny changes for compatibility with the M$ Visual C++ compiler. 2005-01-31 Stefan Jahn * 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 * 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 * 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 * 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 * 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 * 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 * qucsdefs.h (qucs_definition_available): Added new device parameter for the MOSFET: capModel. 2004-12-06 Stefan Jahn * 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 * 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 * 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 * 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 * 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 * 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 * 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 * netdefs.h, qucsdefs.h: Two new files generalizing netlist handling (for new converter program). 2004-10-27 Stefan Jahn * 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 * 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 * matvec.cpp: Fixed bug in copy constructor. 2004-10-21 Stefan Jahn * 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 * circuit.cpp (transientCapacitance): Fixed compiler warning. 2004-10-17 Stefan Jahn * trsolver.cpp: Run inititialization routine also for created circuits. 2004-10-16 Stefan Jahn * circuit.cpp (transientCapacitance): Readjusted the code for a single integration step for controlled capacitances. 2004-10-14 Stefan Jahn * 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 * 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 * 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 * trsolver.cpp: Fixed all predictors (off-by-one indexing into the array of time-steps). 2004-10-09 Stefan Jahn * 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 * 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 * 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 * 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 * 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 * equation.cpp: Speed optimization for generating vector string representation. 2004-09-25 Stefan Jahn * circuit.cpp (transientCapacitance): Implemented transient analysis helper for voltage controlled capacitances. 2004-09-23 Stefan Jahn * eqnsys.cpp: Pass singular matrix to the nasolver via exception but insert a virtual resistance and continue. 2004-09-22 Stefan Jahn * states.cpp (saveState): New function saving a certain state into given pointer location. 2004-09-18 Stefan Jahn * 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 * 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 * trsolver.cpp: Tried to fix timestep adaption... not yet successfully. 2004-09-13 Stefan Jahn * 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 * 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 * 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 * trsolver.h, trsolver.cpp (class trsolver): New files. Some basic preparations for the transient simulation. 2004-09-09 Stefan Jahn * 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 * circuit.cpp (voltageSource): New helper function setting up an internal voltage source for the MNA. 2004-09-06 Stefan Jahn * 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 instead of 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 * vector.cpp: Implemented numerical differentiation of vectors. 2004-08-30 Stefan Jahn * ucs.cpp (main): Fixed bug when using the '-b' command line parameter. Added help text concerning the option. 2004-08-22 Stefan Jahn * eqnsys.cpp: Including 'ieeefp.h' if necessary. 2004-08-21 Stefan Jahn * 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 * 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 * 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 * 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 * eqnsys.cpp: Fixed Schmidt and v. Mises convergence criteria. Implemented 'successive over relaxation' for solving linear equation systems. 2004-08-12 Stefan Jahn * 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 * 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 * spsolver.cpp: Renamed Gopt into Sopt. Changed all referees. 2004-08-01 Stefan Jahn * 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 * 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 * 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 * 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 * spsolver.cpp: Avoiding same singularity for noise matrices as already fixed for S-parameters. Fixed calculation of noise parameters. 2004-07-26 Stefan Jahn * 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 * 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 * check_touchstone.cpp: Support for noise parameters in touchstone files. 2004-07-21 Stefan Jahn * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * fixed all bugs in s-parameter noise analysis. 2004-07-03 Stefan Jahn * 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 * 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 * 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 * 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 * 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 * 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 * 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 * circuit.cpp (copyMatrixS): New function copying S-parameter matrix elements to the circuit. 2004-06-16 Michael Margraf * check_netlist.cpp: Added parameter "Symbol" to "Resistor". 2004-06-09 Stefan Jahn * check_netlist.cpp: Renamed some diode parameters. 2004-06-04 Stefan Jahn * 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 * scan_dataset.l, scan_netlist.l, scan_touchstone.l: Included for MinGW32 platform (native Win32). 2004-05-26 Stefan Jahn * 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 * 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 * 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 * 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 * 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 * 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 * check_netlist.cpp: Checking presence and necessity of DC analysis. 2004-05-02 Stefan Jahn * 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 * vector.cpp: Fixed copy constructor. 2004-04-28 Michael Margraf * 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 * matrix.cpp: Implemented all remaining matrix conversions not limited to two-port parameters (ytos, ztos, ytoz, ztoy). 2004-04-26 Stefan Jahn * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * equation.cpp: Started to implement the equation checker. 2004-03-08 Stefan Jahn * scan_netlist.l: Introduced new EQN state for parsing equations in netlists. The parser+scanner is now working correctly. 2004-03-07 Stefan Jahn * parse_netlist.y: Added parser and scanner rules for equations inside netlists. 2004-02-18 Stefan Jahn * eqnsys.cpp (solve_lu): New equation system solver implemented using so called LU decomposition. 2004-02-17 Stefan Jahn * 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 * 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 * 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 * 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 * 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 * dcsolver.cpp: Non-linear DC circuit analysis is somewhat working now. 2004-02-01 Stefan Jahn * 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 * 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 * 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 * circuit.h (class circuit): Added microstrip substrate property to basic circuit class. 2004-01-17 Stefan Jahn * parse_dataset.y: Fixed reduce/reduce conflict. * scan_dataset.l: Added explicit rule for complex number. 2003-12-26 Stefan Jahn * 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 * 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 * input.cpp (createCircuit): Added 'Vdc', 'Idc' and 'Vac' components to the list of available components. 2003-12-07 Stefan Jahn * 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 * matrix.cpp (stoy, stoz): New matrix conversion routines. 2003-12-01 Stefan Jahn * net.cpp: Added support for differential s parameter ports. 2003-11-30 Stefan Jahn * check_netlist.c: Checking the number of .SP actions and the number of Pac definitions. 2003-11-28 Stefan Jahn * 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 * 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 * checker.c: Fixed bug in available component list. 2003-11-15 Stefan Jahn * 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 * logging.c: Documented this file's functions.