SPICELib.src.ANALYSES

SPICELib.src.ANALYSES.TotalPowerDissipationCalculation

NameDescription
NULL  
TotalPowerDissipationCalculation  
BiasPointCalculation  
OP  
TRAN  
AC  


SPICELib.src.ANALYSES.OP

Parameters

NameDefaultDescription
TimeScale Time scale [s]
LogResults Log variables mode
Gmin1e-12Conductance in parallel with the pn-junction [S]
replaceable model Circuit NULL 
SOLVE_STATIC0OP calculation algorithm: 0, 1, 2 or 3

Modelica definition

model OP 
  extends BiasPointCalculation;
protected 
  SI.Time timeEvent_finishOP(start=1E100);
equation 
  // ---------------------------
  // Control signals do not used
  // ---------------------------
  ctrl_Tran = false;
  ctrl_CBREAK_Tran2IC = false;
  ctrl_CBREAK_Tran2DC = false;
  ctrl_AC = false;
  ctrl_log_AC = false;
  freq = 1E-6;
  // ----------------------
  // Bias point calculation
  // ----------------------
  when initial() then
    biasPoint = true;
    ctrl_OP_value = 0;
  end when;
  // ------------------
  // Finish OP analysis
  // ------------------
  when biasPointCalculated then
    timeEvent_finishOP = time + CLOCK;
  end when;
  when time > timeEvent_finishOP then
    terminate(
      "-----------------------\nFinished OP calculation\n-----------------------");
  end when;
  
end OP;

SPICELib.src.ANALYSES.AC

Parameters

NameDefaultDescription
TimeScale Time scale [s]
LogResults Log variables mode
Gmin1e-12Conductance in parallel with the pn-junction [S]
replaceable model Circuit NULL 
SOLVE_STATIC0OP calculation algorithm: 0, 1, 2 or 3
TYPE_AC_SWEEP 0: LIN; 1: DEC
POINTS_NUMBER LIN: total. DEC: points/decade
START_FREQUENCY [Hz]
END_FREQUENCY [Hz]

Modelica definition

model AC 
  extends BiasPointCalculation;
  // Frequency sweep parameters
  parameter Integer TYPE_AC_SWEEP(
    start=0, 
    min=0, 
    max=1) "0: LIN; 1: DEC";
  parameter Integer POINTS_NUMBER(start=11) "LIN: total. DEC: points/decade";
  parameter SI.Frequency START_FREQUENCY;
  parameter SI.Frequency END_FREQUENCY;
  // Time-related auxiliary variables
  Real log10Freq;
protected 
  SI.Time timeStartAC(start=1E100);
  SI.Time timeEndAC(start=1E100);
  SI.Time timeAClog(start=0);
equation 
  // log10Freq = log10 (freq)
  // ---------------------------
  // Control signals do not used
  // ---------------------------
  ctrl_Tran = false;
  ctrl_CBREAK_Tran2IC = false;
  ctrl_CBREAK_Tran2DC = false;
  // ----------------------
  // Bias point calculation
  // ----------------------
  when initial() then
    biasPoint = true;
    ctrl_OP_value = 0;
  end when;
  // ---------------
  // Frequency sweep 
  // ---------------
  when biasPointCalculated then
    ctrl_AC = true;
    timeStartAC = time;
  end when;
  0 = if TYPE_AC_SWEEP == 0 and ctrl_AC then freq - (END_FREQUENCY - 
    START_FREQUENCY)*(time - timeStartAC)/((POINTS_NUMBER - 1)*2*CLOCK) - 
    START_FREQUENCY else if TYPE_AC_SWEEP == 1 and ctrl_AC then log10Freq - (ln
    (END_FREQUENCY) - ln(START_FREQUENCY))/ln(10)*(time - timeStartAC)/(((ln(
    END_FREQUENCY) - ln(START_FREQUENCY))/ln(10)*(POINTS_NUMBER) - 1)*2*CLOCK)
     - ln(START_FREQUENCY)/ln(10) else freq - 1E-6;
  log10Freq = if ctrl_AC then ln(freq)/ln(10) else -1E100;
  // -----------
  // Log results
  // -----------
  when time > pre(timeAClog) and ctrl_AC then
    LogVariable(freq);
    timeAClog = time + 2*CLOCK;
  end when;
  ctrl_log_AC = not time > timeAClog - CLOCK and ctrl_AC;
  // ------------------
  // Finish AC analysis
  // ------------------
  when freq > END_FREQUENCY then
    timeEndAC = time + CLOCK;
  end when;
  when time > timeEndAC then
    terminate(
      "--------------------\nFinished AC analysis\n--------------------");
  end when;
end AC;

SPICELib.src.ANALYSES.TRAN

Parameters

NameDefaultDescription
TimeScale Time scale [s]
LogResults Log variables mode
Gmin1e-12Conductance in parallel with the pn-junction [S]
replaceable model Circuit NULL 
SOLVE_STATIC0OP calculation algorithm: 0, 1, 2 or 3
TSTOP Transient simulation end time [s]
SKIPBPfalseSkip initial transient solution

Modelica definition

model TRAN 
  extends BiasPointCalculation;
  parameter SI.Time TSTOP "Transient simulation end time";
  parameter Boolean SKIPBP=false "Skip initial transient solution";
  SI.Time TIME(start=-1) "Transient simulation time variable";
protected 
  SI.Time timeEvent_startTran(start=1E100);
equation 
  // ---------------------------
  // Control signals do not used
  // ---------------------------
  ctrl_AC = false;
  ctrl_log_AC = false;
  freq = 1E-6;
  // --------------------------
  // Initial transient solution
  // -------------------------- 
  when initial() and not SKIPBP then
    biasPoint = true;
  end when;
  ctrl_OP_value = if not (time > timeEvent_startTran + CLOCK and not time > 
    timeEvent_startTran + TSTOP + CLOCK) then 1 else 0;
  // ------------------
  // Transient analysis
  // ------------------
  when biasPointCalculated and not SKIPBP or initial() and SKIPBP then
    timeEvent_startTran = time;
  end when;
  
  ctrl_Tran = time > timeEvent_startTran and not time > timeEvent_startTran + 
    TSTOP + CLOCK;
  TIME = if ctrl_Tran then time - timeEvent_startTran else -1;
  
  // ----------------------------
  // Dynamic model initialization
  // ----------------------------
  ctrl_CBREAK_Tran2IC = SKIPBP and time > timeEvent_startTran and not time > 
    timeEvent_startTran + CLOCK;
  
  ctrl_CBREAK_Tran2DC = not SKIPBP and time > timeEvent_startTran and not time
     > timeEvent_startTran + CLOCK;
  // -------------------------
  // Finish transient analysis
  // -------------------------
  when time > timeEvent_startTran + TSTOP then
    terminate(
      "------------------------\nFinished TRAN simulation\n------------------------");
  end when;
  
end TRAN;

SPICELib.src.ANALYSES.NULL

Modelica definition

model NULL 
  
end NULL;

SPICELib.src.ANALYSES.TotalPowerDissipationCalculation SPICELib.src.ANALYSES.TotalPowerDissipationCalculation

Modelica definition

model TotalPowerDissipationCalculation 
  outer INTERFACE.PowerDissipation TotalPowerDissipation;
  INTERFACE.PowerDissipation powerDissipation;
equation 
  connect(powerDissipation, TotalPowerDissipation);
end TotalPowerDissipationCalculation;

SPICELib.src.ANALYSES.BiasPointCalculation

Parameters

NameDefaultDescription
TimeScale Time scale [s]
LogResults Log variables mode
Gmin1e-12Conductance in parallel with the pn-junction [S]
replaceable model Circuit NULL 
SOLVE_STATIC0OP calculation algorithm: 0, 1, 2 or 3

Modelica definition

partial model BiasPointCalculation 
  extends INIT.Analysis;
  replaceable model Circuit = NULL;
  extends Circuit;
  // Total power dissipation
  inner INTERFACE.PowerDissipation TotalPowerDissipation;
  TotalPowerDissipationCalculation TPDcal;
  SI.Power totalPowerDissipation;
  // Time-related parameters
  constant Real TIME_SLOT=100 "Percentage of TIME_SCALE";
  SI.Time CLOCK=TIME_SLOT*TIME_SCALE/100;
  // Bias point calculation algorithm
  parameter Real SOLVE_STATIC=0 "OP calculation algorithm: 0, 1, 2 or 3";
  // Local control signals
protected 
  Boolean biasPoint;
  Boolean biasPointCalculated;
  // Time-event variables
  SI.Time timeEvent_startBPC(start=1E100);
  SI.Time timeGMIN(start=0);
  // Buses of control auxiliary variables
  Boolean ctrlDC_Bus[4];
  Boolean ctrlLogDC_Bus[4];
  Boolean ctrlClampDC_Bus[4];
  Boolean biasPointCalc_Bus[4];
  Integer ctrlOPmode_Bus[4];
  Integer ctrlICmode_Bus[4];
equation 
  // --------------------
  // Analysis temperature
  // --------------------
  temp = 300;
  // ----------------------------
  // Start bias point calculation
  // ----------------------------
  when biasPoint then
    timeEvent_startBPC = time;
  end when;
  // ------------------------------------------
  // SOLVE_STATIC == 0 - Static model iteration
  // ------------------------------------------
  ctrlDC_Bus[1] = SOLVE_STATIC == 0 and time > timeEvent_startBPC and not time
     > timeEvent_startBPC + CLOCK;
  ctrlLogDC_Bus[1] = SOLVE_STATIC == 0 and time > timeEvent_startBPC and not 
    time > timeEvent_startBPC + CLOCK;
  ctrlClampDC_Bus[1] = SOLVE_STATIC == 0 and time > timeEvent_startBPC and not 
    time > timeEvent_startBPC + CLOCK;
  biasPointCalc_Bus[1] = SOLVE_STATIC == 0 and time > timeEvent_startBPC and 
    not time > timeEvent_startBPC + CLOCK;
  ctrlOPmode_Bus[1] = 0;
  ctrlICmode_Bus[1] = 0;
  // -------------------------------------------
  // SOLVE_STATIC == 1 - Static model simulation
  // -------------------------------------------
  ctrlDC_Bus[2] = SOLVE_STATIC == 1 and time > timeEvent_startBPC and not time
     > timeEvent_startBPC + TIME_SCALE + CLOCK;
  ctrlLogDC_Bus[2] = SOLVE_STATIC == 1 and time > timeEvent_startBPC + 
    TIME_SCALE and not time > timeEvent_startBPC + TIME_SCALE + CLOCK;
  ctrlClampDC_Bus[2] = SOLVE_STATIC == 1 and time > timeEvent_startBPC and not 
    time > timeEvent_startBPC + TIME_SCALE + CLOCK;
  biasPointCalc_Bus[2] = SOLVE_STATIC == 1 and time > timeEvent_startBPC + 
    TIME_SCALE and not time > timeEvent_startBPC + TIME_SCALE + CLOCK;
  ctrlOPmode_Bus[2] = if SOLVE_STATIC == 1 and time > timeEvent_startBPC and 
    not time > timeEvent_startBPC + TIME_SCALE then 1 else 0;
  ctrlICmode_Bus[2] = if SOLVE_STATIC == 1 and time > timeEvent_startBPC and 
    not time > timeEvent_startBPC + TIME_SCALE then 1 else 0;
  // ----------------------------------
  // SOLVE_STATIC == 2 - GMIN algorithm
  // ----------------------------------
  ctrlDC_Bus[3] = SOLVE_STATIC == 2 and time > timeEvent_startBPC and not time
     > timeEvent_startBPC + 12*CLOCK;
  ctrlLogDC_Bus[3] = SOLVE_STATIC == 2 and time > timeEvent_startBPC + 11*CLOCK
     and not time > timeEvent_startBPC + 12*CLOCK;
  ctrlClampDC_Bus[3] = SOLVE_STATIC == 2 and time > timeEvent_startBPC and not 
    time > timeEvent_startBPC + 12*CLOCK;
  biasPointCalc_Bus[3] = SOLVE_STATIC == 2 and time > timeEvent_startBPC + 11*
    CLOCK and not time > timeEvent_startBPC + 12*CLOCK;
  ctrlOPmode_Bus[3] = 0;
  ctrlICmode_Bus[3] = 0;
  when time > timeEvent_startBPC + pre(timeGMIN) and SOLVE_STATIC == 2 then
    timeGMIN = pre(timeGMIN) + CLOCK;
    scaleGMIN = if time < timeEvent_startBPC + CLOCK/2 then 1E10 else if pre(
      scaleGMIN) > 2 then pre(scaleGMIN)/10 else 1;
  end when;
  // --------------------------------------------
  // SOLVE_STATIC == 3 - Dynamic model simulation
  // --------------------------------------------
  ctrl_IS_TranOP = SOLVE_STATIC == 3 and time > timeEvent_startBPC and not time
     > timeEvent_startBPC + 2*TIME_SCALE + CLOCK;
  
  ctrlOPmode_Bus[4] = if SOLVE_STATIC == 3 and time > timeEvent_startBPC and 
    not time > timeEvent_startBPC + TIME_SCALE then 1 else 0;
  
  ctrl_IS_inhibit = SOLVE_STATIC == 3 and time > timeEvent_startBPC + 2*
    TIME_SCALE and not time > timeEvent_startBPC + 2*TIME_SCALE + CLOCK;
  
  ctrl_RBREAK_Tran2DC = SOLVE_STATIC == 3 and time > timeEvent_startBPC + 2*
    TIME_SCALE and not time > timeEvent_startBPC + 2*TIME_SCALE + CLOCK;
  
  ctrlDC_Bus[4] = SOLVE_STATIC == 3 and time > timeEvent_startBPC + 2*
    TIME_SCALE and not time > timeEvent_startBPC + 2*TIME_SCALE + 3*CLOCK;
  
  ctrlLogDC_Bus[4] = SOLVE_STATIC == 3 and time > timeEvent_startBPC + 2*
    TIME_SCALE + 2*CLOCK and not time > timeEvent_startBPC + 2*TIME_SCALE + 3*
    CLOCK;
  
  ctrl_CBREAK_resetTran = SOLVE_STATIC == 3 and time > timeEvent_startBPC + 2*
    TIME_SCALE + CLOCK and not time > timeEvent_startBPC + 2*TIME_SCALE + 2*
    CLOCK;
  
  biasPointCalc_Bus[4] = SOLVE_STATIC == 3 and time > timeEvent_startBPC + 2*
    TIME_SCALE + 2*CLOCK and not time > timeEvent_startBPC + 2*TIME_SCALE + 3*
    CLOCK;
  
  ctrl_IC_clampTran = SOLVE_STATIC == 3 and time > timeEvent_startBPC and not 
    time > timeEvent_startBPC + CLOCK + 2*TIME_SCALE;
  
  ctrlICmode_Bus[4] = if SOLVE_STATIC == 3 and time > timeEvent_startBPC and 
    not time > timeEvent_startBPC + TIME_SCALE then 1 else 0;
  
  ctrlClampDC_Bus[4] = SOLVE_STATIC == 3 and time > timeEvent_startBPC + 2*
    TIME_SCALE + CLOCK and not time > timeEvent_startBPC + 2*TIME_SCALE + 3*
    CLOCK;
  
  // --------------------------------
  // Logic-OR of control signal buses
  // --------------------------------
  ctrl_log_DC = ctrlLogDC_Bus[1] or ctrlLogDC_Bus[2] or ctrlLogDC_Bus[3] or 
    ctrlLogDC_Bus[4];
  biasPointCalculated = biasPointCalc_Bus[1] or biasPointCalc_Bus[2] or 
    biasPointCalc_Bus[3] or biasPointCalc_Bus[4];
  ctrl_DC = ctrlDC_Bus[1] or ctrlDC_Bus[2] or ctrlDC_Bus[3] or ctrlDC_Bus[4];
  ctrl_IC_clampDC = ctrlClampDC_Bus[1] or ctrlClampDC_Bus[2] or ctrlClampDC_Bus[
    3] or ctrlClampDC_Bus[4];
  ctrl_OP_mode = max(ctrlOPmode_Bus);
  ctrl_IC_mode = max(ctrlICmode_Bus);
  // --------------
  // OP results log
  // --------------
  when ctrl_log_DC then
    LogVariable(ctrl_log_DC);
    totalPowerDissipation = -TPDcal.powerDissipation.dissipatedPower;
    LogVariable(totalPowerDissipation);
  end when;
  
end BiasPointCalculation;

SPICELib.src.ANALYSES.BiasPointCalculation.Circuit

Modelica definition

replaceable model Circuit = NULL;

HTML-documentation generated by Dymola Tue Oct 14 18:26:24 2003 .