/**********
Copyright 1990 Regents of the University of California.  All rights reserved.
Author: 1985 Thomas L. Quarles
Modified: 2000 AlansFixes
**********/

#ifndef OPT
#define OPT

    /* structure used to describe the statistics to be collected */

typedef struct sSTATdevList {
    struct sSTATdevList *STATnextDev;
    int modNum;
    int instNum;
} STATdevList;

typedef struct {

    int STATnumIter;    /* number of total iterations performed */
    int STATtranIter;   /* number of iterations for transient analysis */
    int STAToldIter;    /* number of iterations at the end of the last point */
                        /* used to compute iterations per point */

    int STATtimePts;    /* total number of timepoints */
    int STATaccepted;   /* number of timepoints accepted */
    int STATrejected;   /* number of timepoints rejected */

    int STATtotalDev;   /* PN: number of total devices in the netlist */

    double STATtotAnalTime;     /* total time for all analysis */
    double STATloadTime;        /* total time spent in device loading */
    double STATdecompTime;      /* total time spent in LU decomposition */
    double STATsolveTime;       /* total time spent in F-B subst. */
    double STATreorderTime;     /* total time spent reordering */
    double STATsyncTime;        /* total time spent sync'ing after load */
    double STATtranTime;        /* transient analysis time */
    double STATtranDecompTime;  /* time spent in transient LU decomposition */
    double STATtranSolveTime;   /* time spent in transient F-B subst. */
    double STATtranLoadTime;    /* time spent in transient device loading */
    double STATtranTruncTime;   /* time spent calculating LTE and new step */
    double STATtranSyncTime;    /* time spent in transient sync'ing */
    double STATacTime;          /* AC analysis time */
    double STATacDecompTime;    /* time spent in AC LU decomposition */
    double STATacSolveTime;     /* time spent in AC F-B subst. */
    double STATacLoadTime;      /* time spent in AC device loading */
    double STATacSyncTime;      /* time spent in transient sync'ing */
    STATdevList *STATdevNum;    /* PN: Number of instances and models for each device */
} STATistics;

#define OPT_GMIN 1
#define OPT_RELTOL 2
#define OPT_ABSTOL 3
#define OPT_VNTOL 4
#define OPT_TRTOL 5
#define OPT_CHGTOL 6
#define OPT_PIVTOL 7
#define OPT_PIVREL 8
#define OPT_TNOM 9
#define OPT_ITL1 10
#define OPT_ITL2 11
#define OPT_ITL3 12
#define OPT_ITL4 13
#define OPT_ITL5 14
#define OPT_DEFL 15
#define OPT_DEFW 16
#define OPT_DEFAD 17
#define OPT_DEFAS 18
#define OPT_BYPASS 19
#define OPT_MAXORD 20

#define OPT_ITERS 21
#define OPT_TRANIT 22
#define OPT_TRANPTS 23
#define OPT_TRANACCPT 24
#define OPT_TRANRJCT 25
#define OPT_TOTANALTIME 26
#define OPT_TRANTIME 27
#define OPT_LOADTIME 28
#define OPT_DECOMP 29
#define OPT_SOLVE 30
#define OPT_TRANDECOMP 31
#define OPT_TRANSOLVE 32
#define OPT_TEMP 33
#define OPT_OLDLIMIT 34
#define OPT_TRANCURITER 35
#define OPT_SRCSTEPS 36
#define OPT_GMINSTEPS 37
#define OPT_MINBREAK 38
#define OPT_NOOPITER 39
#define OPT_EQNS 40
#define OPT_REORDTIME 41
#define OPT_METHOD 42
#define OPT_TRYTOCOMPACT 43
#define OPT_BADMOS3 44
#define OPT_KEEPOPINFO 45
#define OPT_TRANLOAD 46
#define OPT_TRANTRUNC 47
#define OPT_ACTIME 48
#define OPT_ACLOAD 49
#define OPT_ACDECOMP 50
#define OPT_ACSOLVE 51
#define OPT_ORIGNZ 52
#define OPT_FILLNZ 53
#define OPT_TOTALNZ 54
#define OPT_SYNCTIME 58
#define OPT_TRANSYNC 59
#define OPT_ACSYNC 60

/* AlansFixes: It is not possible to use the same numbers of the
   original Alan code. The following options are all AlansFixes */
    
#define OPT_GSHUNT       61  /* Original: 48 */
#define OPT_DEFM         62  /* Original: 46 */
#define OPT_GMINFACT     63  /* Original: 47 */
#define OPT_COPYNODESETS 64  /* Original: 49 (NodesetFix) */
#define OPT_NODEDAMPING  65  /* Original: 50 (Node_Damping) */
#define OPT_ABSDV        66  /* Original: 51 (Node_Damping) */ 
#define OPT_RELDV        67  /* Original: 52 (Node_Damping) */

#define OPT_NOOPAC       68

#ifdef XSPICE
/* gtri - begin - wbk - add new options */
#define OPT_ENH_NOOPALTER           100
#define OPT_ENH_RAMPTIME            101
#define OPT_EVT_MAX_EVT_PASSES      102
#define OPT_EVT_MAX_OP_ALTER        103
#define OPT_ENH_CONV_LIMIT          104
#define OPT_ENH_CONV_ABS_STEP       105
#define OPT_ENH_CONV_STEP           106
#define OPT_MIF_AUTO_PARTIAL        107
#define OPT_ENH_RSHUNT              108
/* gtri - end   - wbk - add new options */
#endif

#define OPT_TOTALDEV 200 /* Total devices in the netlist */

#endif /*OPT*/
