//************************************************************************************************** // CmdGnuCapOPT.hpp * // ------------------ * // Description : This class contains values associated with the GNU-Cap OPTIONS command. It * // inherits from the class CmdBase. * // Started : 2006-09-11 * // Last Update : 2015-03-07 * // Copyright : (C) 2006-2016 MSWaters * //************************************************************************************************** // Note : The following defaults where generated by GNU-Cap on 2014-03-27 (run gnucap end enter * // options command without arguments) : * // * // * i/o * // .options noacct nolist clobber out=9999 ydivisions=4.0 phase=degrees harmonics=9 edit * // language=acs insensitive units=spice recursion=20 * // * accuracy, i/o * // .options numdgt=5 floor=1.E-21 vfloor=1.f roundofftol=100.f * // * accuracy, tolerances * // .options gmin= 1.0p short=10.0u reltol=0.001 abstol=1.0p vntol= 1.0u trtol=7.0 * // chgtol=10.0f pivtol=100.0f bypasstol=0.1 loadtol=0.1 * // * accuracy, algorithms * // .options method=trap bypass incmode lcbypass lubypass fbbypass traceload order=auto * // mode=mixed transits=2 noquitconvfail * // * iteration limiting and heuristics * // .options itl1=100 itl2=50 itl3=6 itl4=20 itl5=0 itl6=5000 itl7=1 itl8=99 itermin=1 * // vmax=5.0 vmin=-5.0 dampmax=1.0 dampmin=0.5 dampstrategy=0 * // * time step control * // .options dtmin=1.0p dtratio=1.0G trstepgrow=1.E+99 trstephold=1.E+99 trstepshrink=2.0 * // trreject=0.5 trsteporder=3 trstepcoef1=0.25 trstepcoef2=0.04166667 * // trstepcoef3=0.005208333 * // * circuit environment * // .options tnom= 27.0 temperature=27.0 rstray cstray defl=100.0u defw=100.0u defad=0.0 * // defas=0.0 * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDGCPOPT_HPP #define CMDGCPOPT_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "ngspice/commands/CmdNgSpiceOPT.hpp" #include "utility/CnvtType.hpp" class CmdNgSpiceOPT; // wxWidgets Includes #include // Local Macro and/or Constant Declarations #define GCP_ABSTOL wxT("1.0pA") // Absolute error tolerance #define GCP_CHGTOL wxT("10.0fC") // Charge error tolerance #define GCP_RELTOL wxT("0.001") // Relative error tolerance (0.001 = 0.1%) #define GCP_TRTOL wxT("7.0") // Transient error tolerance #define GCP_VNTOL wxT("1.0uV") // Voltage error tolerance (Volt) #define GCP_DEFL wxT("100.0um") // MOSFET default channel length (metre) #define GCP_DEFW wxT("100.0um") // MOSFET default channel width (metre) #define GCP_DEFAD wxT("0.0") // MOSFET default drain diffusion area (sq.m) #define GCP_DEFAS wxT("0.0") // MOSFET default source diffusion area (sq.m) #define GCP_GMIN wxT("1.0pS") // Minimum conductance to ground (Siemen) #define GCP_SHORT wxT("100.0nOhm") // Resistance of voltage source or short (Ohm) #define GCP_TEMP wxT("27.0Deg.C") // Ambient temperature of the circuit (Deg.C) #define GCP_TNOM wxT("27.0Deg.C") // Nominal temperature at which device parameters are measured (Deg.C) #define GCP_DAMPMAX wxT("1.0") // Newton damping factor in normal cases #define GCP_DAMPMIN wxT("0.5") // Newton damping factor in problem cases #define GCP_DTMIN wxT("1.0pSec") // Smallest internal time step in TR analysis #define GCP_DTRATIO wxT("1.0E9") // Ratio between min. and max. time step #define GCP_TRREJECT wxT("0.5") // Transient error rejection threshold #define GCP_TRSTEPG wxT("1.0E99") // Max. internal step size growth in TR analysis #define GCP_TRSTEPH wxT("1.0E99") // Max. internal step size growth in TR analysis when iteration exceeds it13 but still converges #define GCP_TRSTEPS wxT("2.0") // Amount to shrink step size when convergence fails in TR anaylis #define GCP_ROUND wxT("1.0E-13") // Numeric rounding tolerance #define GCP_FLOOR wxT("1.0E-21") // Effective zero value #define GCP_VFLOOR wxT("1.0fV") // Effective zero value for voltage probes #define GCP_VMAX wxT("5.0V") // Initial positive node voltage limit (Volt) #define GCP_VMIN wxT("-5.0V") // Initial negative node voltage limit (Volt) #define GCP_HARMS wxT("9") // Number of harmonics to display in FO analysis #define GCP_ITL1 wxT("100") // DC iteration limit #define GCP_ITL2 wxT("50") // DC transfer curve iteration limit (not used in GNU-Cap) #define GCP_ITL3 wxT("6") // Transient lower iteration limit #define GCP_ITL4 wxT("20") // Transient upper iteration limit #define GCP_ITL5 wxT("0") // Transient total iteration limit (not used in GNU-Cap) #define GCP_ITL6 wxT("5000") // Source stepping iteration limit (not used in GNU-Cap) #define GCP_ITL7 wxT("1") // Worst case analysis iteration limit #define GCP_ITL8 wxT("100") // Convergence diagnostic iteration threshold #define GCP_ITERMIN wxT("1") // Number of extra iterations after convergence #define GCP_NUMDGT wxT("5") // Precision : no. of digits after decimal point #define GCP_RECURS wxT("20") // Limit recursion levels in expression evaluation #define GCP_TRANSITS wxT("2") // Mixed mode transition count #define GCP_METHOD wxT("Trap") // Differentiation method (TRAPezoidal and/or EULER) #define GCP_MODE wxT("Mixed") // Simulation mode (analog, digital or mixed) #define GCP_ORDER wxT("Auto") // Equation ordering (forward, reverse or auto) #define GCP_PHASE wxT("Degrees") // Phase angle units : degrees or radians #define GCP_OPTS false // Enable printing of option values #define GCP_BYPASS true // Bypass model evaluation if appropriate #define GCP_FBBYPASS true // Skip matrix solution the last iteration #define GCP_LCBYPASS true // Bypass evaluation of linear ind. & cap. when possible #define GCP_LUBYPASS true // Bypass parts of LU decomposition if appropriate #define GCP_INCMODE true // Incrementally update the matrix #define GCP_TRACEL true // Only load changed elements to the matrix #define GCP_CSTRAY true // Include capacitance in device models #define GCP_RSTRAY false // Include series resistance in device models #define GCP_QUITCONV false // Quit on convergence failure in TR analysis #define GCP_DAMPST wxT("0x00") // Damping strategy flags : 0x01 | 0x02 | 0x04 | 0x10 | 0x20 ??? Not implemented correctly //************************************************************************************************** class CmdGnuCapOPT : public CmdBase { private : virtual bool bValidate( void ); public : // Options which are floating point values wxString m_osABSTOL; wxString m_osCHGTOL; wxString m_osDAMPMAX; wxString m_osDAMPMIN; wxString m_osDEFL; wxString m_osDEFW; wxString m_osDEFAD; wxString m_osDEFAS; wxString m_osDTMIN; wxString m_osDTRATIO; wxString m_osFLOOR; wxString m_osGMIN; wxString m_osRELTOL; wxString m_osROUND; wxString m_osSHORT; wxString m_osTEMP; wxString m_osTNOM; wxString m_osTRREJECT; wxString m_osTRSTEPG; wxString m_osTRSTEPH; wxString m_osTRSTEPS; wxString m_osTRTOL; wxString m_osVFLOOR; wxString m_osVMAX; wxString m_osVMIN; wxString m_osVNTOL; // Options which are integer values wxString m_osDAMPST; wxString m_osHARMS; wxString m_osITL1; wxString m_osITL2; wxString m_osITL3; wxString m_osITL4; wxString m_osITL5; wxString m_osITL6; wxString m_osITL7; wxString m_osITL8; wxString m_osITERMIN; wxString m_osNUMDGT; wxString m_osRECURS; wxString m_osTRANSITS; // Options which are string values wxString m_osMETHOD; wxString m_osMODE; wxString m_osORDER; wxString m_osPHASE; // Options which are boolean values bool m_bBYPASS; bool m_bCSTRAY; bool m_bFBBYPASS; bool m_bINCMODE; bool m_bLUBYPASS; bool m_bOPTS; bool m_bQUITCONV; bool m_bRSTRAY; bool m_bTRACEL; CmdGnuCapOPT( void ); virtual ~CmdGnuCapOPT( ); virtual bool bSetDefaults( void ); virtual bool bParse ( void ); virtual bool bFormat( void ); CmdGnuCapOPT & operator = ( const CmdNgSpiceOPT & roCmdOPT ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDGCPOPT_HPP